Cambiar el tamaño del marcador en la trama con GeoPandas

10

Tengo un geodataframe con puntos y algunos datos asociados. Quiero trazarlo en un mapa usando geopandas y hacer que el tamaño de los puntos corresponda a una de las columnas del geodataframe.

Hasta ahora tengo el siguiente código:

base = world.plot(color='white', figsize=(20,10))
geo_df.plot(ax=base, marker='.', color='red', markersize = 
geo_df['Pop_2005'])
plt.xlim([-85, -60])
plt.ylim([-5, 12.5]);

Pero recibo el siguiente error: TypeError: cannot convert the series to <class 'float'>

¿Algunas ideas?

Juan Francisco Saldarriaga
fuente
¿Es todo este código?
Fezter
@Fezter ese es todo el código para dibujar el mapa. Hay más código para construir el geodataframe, pero eso no parecía relevante aquí. ¿Hay algo crucial que falta aquí? Gracias.
Juan Francisco Saldarriaga
¿Cuál es el tipo de campo de Pop_2005? ¿Es flotante o int?
Fezter
3
¿Podría ser que solo puede establecer un tamaño de marcador único, y se espera un único valor flotante y no una serie / lista / tupla o flotantes?
derNincompoop
1
¿Valdría la pena lanzarlo Pop_2005explícitamente a un flotante o entero? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Respuestas:

7

En geopandas> = 0.3 (lanzado en septiembre de 2017), el trazado de puntos se basa en el scattermétodo de trazado de matplotlib debajo del capó, y esto acepta un tamaño de marcador variable.

Entonces, ahora puede pasar una columna a markersizelo que hizo el OP en la pregunta original:

import geopandas

cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
# adding a column with random values for the size
cities['values'] = np.abs(np.random.randn(len(cities))) * 50

cities.plot(markersize=cities['values'])

da:

ingrese la descripción de la imagen aquí

Por supuesto, si su objetivo es simplemente cambiar el tamaño del marcador a un valor constante diferente, aún puede pasar un único flotante a la palabra clave:

cities.plot(markersize=10)
joris
fuente