Zmień rozmiar znacznika na wykresie za pomocą GeoPandas


10

Mam geodataframe z punktami i niektórymi powiązanymi danymi. Chcę wykreślić go na mapie przy użyciu geopand i mieć rozmiar punktów odpowiadający jednej z kolumn w ramce geodata.

Do tej pory mam następujący kod:

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

Ale pojawia się następujący błąd: TypeError: cannot convert the series to <class 'float'>

Jakieś pomysły?


Czy to cały kod?
Fezter

@ Fezter, to wszystko kod do rysowania mapy. Jest więcej kodu do budowania geodataframe, ale tutaj nie wydawało się to istotne. Czy brakuje tu czegoś kluczowego? Dzięki.
Juan Francisco Saldarriaga

Jaki jest typ pola Pop_2005? Czy to float czy int?
Fezter

3
Czy to możliwe, że możesz ustawić tylko jeden rozmiar znacznika i oczekuje on wartości pojedynczej liczby zmiennoprzecinkowej, a nie serii / listy / krotki lub liczb zmiennoprzecinkowych?
derNincompoop,

1
Czy warto rzucić Pop_2005wprost na liczbę zmiennoprzecinkową lub całkowitą? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Odpowiedzi:


7

W geopandach> = 0,3 (wydany we wrześniu 2017 r.), scatterWykreślanie punktów opiera się na metodzie matplotlib pod maską, a to przyjmuje zmienną wielkość markera.

Teraz możesz przekazać kolumnę do markersizetego, co OP zrobił w pierwotnym pytaniu:

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

daje:

wprowadź opis zdjęcia tutaj

Oczywiście, jeśli Twoim celem jest po prostu zmiana rozmiaru znacznika na inną stałą wartość, nadal możesz przekazać pojedynczy parametr zmiennoprzecinkowy do słowa kluczowego:

cities.plot(markersize=10)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.