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.