Ändern Sie die Markergröße im Plot mit GeoPandas

10

Ich habe einen Geodatenrahmen mit Punkten und einigen zugehörigen Daten. Ich möchte es mit Geopandas auf einer Karte darstellen und die Größe der Punkte einer der Spalten im Geodatenrahmen entsprechen lassen.

Bisher habe ich folgenden Code:

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

Aber ich bekomme folgenden Fehler: TypeError: cannot convert the series to <class 'float'>

Irgendwelche Ideen?

Juan Francisco Saldarriaga
quelle
Ist das der ganze Code?
Fezter
@Fezter, das ist der gesamte Code zum Zeichnen der Karte. Es gibt mehr Code zum Erstellen des Geodatenrahmens, aber das schien hier nicht relevant zu sein. Fehlt hier etwas Entscheidendes? Vielen Dank.
Juan Francisco Saldarriaga
Was ist der Feldtyp von Pop_2005? Ist es float oder int?
Fezter
3
Könnte es sein, dass Sie nur eine einzelne Markergröße festlegen können und ein einzelner Float-Wert erwartet wird und keine Serie / Liste / Tupel oder Floats?
derNincompoop
1
Wäre es sinnvoll, Pop_2005explizit in einen Float oder eine Ganzzahl umzuwandeln? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
Om_henners

Antworten:

7

In Geopandas> = 0,3 (veröffentlicht im September 2017) basiert die scatterDarstellung von Punkten auf der Darstellungsmethode von Matplotlib unter der Haube, und dies akzeptiert eine variable Markierungsgröße.

Jetzt können Sie also tatsächlich eine Spalte an das übergeben markersize, was das OP in der ursprünglichen Frage getan hat:

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

gibt:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie lediglich die Markierungsgröße auf einen anderen konstanten Wert ändern möchten, können Sie dem Schlüsselwort natürlich immer noch einen einzelnen Gleitkommawert übergeben:

cities.plot(markersize=10)
Joris
quelle