Changer la taille du marqueur dans le tracé avec GeoPandas

10

J'ai une géodonnées avec des points et des données associées. Je veux le tracer sur une carte à l'aide de géopandas et faire correspondre la taille des points à l'une des colonnes du cadre de géodonnées.

Jusqu'à présent, j'ai le code suivant:

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]);

Mais j'obtiens l'erreur suivante: TypeError: cannot convert the series to <class 'float'>

Des idées?

Juan Francisco Saldarriaga
la source
Est-ce tout le code?
Fezter
@Fezter, c'est tout le code pour dessiner la carte. Il y a plus de code pour construire le géodonnées mais cela ne semblait pas pertinent ici. Y a-t-il quelque chose de crucial qui manque ici? Merci.
Juan Francisco Saldarriaga
Quel est le type de champ de Pop_2005? Est-ce flottant ou int?
Fezter
3
Se pourrait-il que vous ne puissiez définir qu'une seule taille de marqueur, et qu'il attend une seule valeur flottante et non une série / liste / tuple ou des flottants?
derNincompoop
1
Serait-il utile de transtyper Pop_2005explicitement en un flottant ou un entier? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Réponses:

7

Dans les géopandas> = 0,3 (publié en septembre 2017), le tracé des points est basé sur la scatterméthode de tracé de matplotlib sous le capot, ce qui accepte une taille de marqueur variable.

Alors maintenant, vous pouvez réellement passer une colonne à markersizece que l'OP a fait dans la question d'origine:

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'])

donne:

entrez la description de l'image ici

Bien sûr, si votre objectif est simplement de changer la taille du marqueur en une valeur constante différente, vous pouvez toujours passer un seul flottant au mot clé:

cities.plot(markersize=10)
joris
la source