Cambia la dimensione del marker nella trama con GeoPandas


10

Ho un geodataframe con punti e alcuni dati associati. Voglio tracciarlo su una mappa usando geopandas e avere la dimensione dei punti corrispondente a una delle colonne nel geodataframe.

Finora ho il seguente codice:

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

Ma sto ricevendo il seguente errore: TypeError: cannot convert the series to <class 'float'>

Qualche idea?


È tutto questo il codice?
— Fezter

@Fezter è tutto il codice per disegnare la mappa. C'è più codice per costruire il geodataframe ma qui non sembra rilevante. C'è qualcosa di cruciale che manca qui? Grazie.
— Juan Francisco Saldarriaga,

Qual è il tipo di campo di Pop_2005? È float o int?
— Fezter

3
Potrebbe essere che puoi impostare solo una singola dimensione del marker, e si aspetta un singolo valore float e non una serie / lista / tupla o float?
— derNincompoop,

1
Vale la pena lanciare Pop_2005esplicitamente su un float o un numero intero? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
— om_henners,

Risposte:


7

In geopandas> = 0.3 (rilasciato a settembre 2017), la trama dei punti si basa sul scattermetodo di trama di matplotlib sotto il cofano, e questo accetta una dimensione di marcatura variabile.

Quindi ora puoi effettivamente passare una colonna a markersizeciò che l'OP ha fatto nella domanda originale:

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

dà:

inserisci qui la descrizione dell'immagine

Naturalmente, se il tuo obiettivo è semplicemente quello di cambiare la dimensione del marker con un valore costante diverso, puoi comunque passare un singolo float alla parola chiave:

cities.plot(markersize=10)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.