Funciones de matplotlib.pyplot

Comencemos con un ejemplo sencillo: mostremos un punto en las coordenadas geográficas de Madrid (Latitud: 40.4165000, longitud: -3.7025600). El objeto mapa puede ser utilizado para obtener las posiciones x e y correspondientes a un punto referenciado por su longitud y latitud (en este orden). Así, las coordenadas x e y de Madrid vendrían dadas por:

x, y = m(-3.70256, 40.4165)

Estas coordenadas podría ser pasadas a la función plt.plot para mostrar un punto en dichas coordenadas, o a la función plt.text para mostrar un texto en dicho lugar:

fig = plt.figure(figsize = (8, 8))
m = Basemap(projection = "lcc", lat_0 = 40.4165, lon_0 = -3, width = 1.2e6, height = 1e6, resolution = "l")
m.shadedrelief();
x, y = m(-3.70256, 40.4165)
plt.plot(x, y, "*", markersize = 10);
plt.text(x * 1.02, y * 1.02 , "Madrid", fontsize = 15);

Madrid en el mapa

Si quisiéramos generalizar este procedimiento, tendríamos que pasar al objeto m dos argumentos: la lista correspondiente a las longitudes de los puntos a mostrar, y la lista correspondiente a las latitudes de los puntos a mostrar:

ciudades = ["Madrid", "Barcelona", "Sevilla"]
longitudes = [-3.70256, 2.16488, -5.97317]
latitudes = [40.4165, 41.39225, 37.38283]
fig = plt.figure(figsize = (8, 8))
m = Basemap(projection = "lcc", lat_0 = 40.4165, lon_0 = -3, width = 1.2e6, height = 1e6, resolution = "l")
m.shadedrelief();
x, y = m(longitudes, latitudes)
plt.plot(x, y, "*", markersize = 10);
for i in range(len(x)):
    plt.text(x[i] * 1.02, y[i] * 1.02, ciudades[i], fontsize = 15);

Madrid, Sevilla y Barcelona en el mapa

Para probar esta funcionalidad en un conjunto de datos más extenso, vamos a usar el dataset de "California Housing Prices" disponible en kaggle. Una vez descargado de kaggle y cargado como dataframe, podemos ver el aspecto que tiene:

housing = pd.read_csv("california-housing.csv")
housing.head()

Dataset "California Housing Prices"

Para centrar el mapa podemos calcular el punto medio entre las máximas y mínimas longitudes y latitudes, y probar con un cierto ancho y alto del mapa:

mean_longitude = (np.max(housing.longitude) + np.min(housing.longitude))/2
mean_latitude = (np.max(housing.latitude) + np.min(housing.latitude))/2

Para el cálculo de x e y, debemos pasar al objeto m listas o arrays (no acepta series) y para mostrar los puntos podemos recurrir a la función plt.scatter, indicando como tamaño del punto la población (escalada) y como color del punto el valor medio de las casas:

fig = plt.figure(figsize = (10, 10))
m = Basemap(projection = "lcc", lat_0 = mean_latitude, lon_0 = mean_longitude, width = 1.2e6, height = 1.2e6, resolution = "f")
m.shadedrelief();
x, y = m(housing.longitude.values, housing.latitude.values)
plt.scatter(x, y, c = housing.median_house_value, s = housing.population/200, alpha = 0.5);
plt.colorbar();

California Housing Prices