Alterar o tamanho do marcador na plotagem com GeoPandas

10

Eu tenho um geodataframe com pontos e alguns dados associados. Quero plotá-lo em um mapa usando geopandas e ter o tamanho dos pontos correspondentes a uma das colunas no geodataframe.

Até agora, tenho o seguinte código:

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

Mas estou recebendo o seguinte erro: TypeError: cannot convert the series to <class 'float'>

Alguma ideia?

Juan Francisco Saldarriaga
fonte
Esse é todo o código?
Fezter
@ Fezter é todo o código para desenhar o mapa. Há mais código para a construção do geodataframe, mas isso não parece relevante aqui. Há algo crucial faltando aqui? Obrigado.
Juan Francisco Saldarriaga
Qual é o tipo de campo do Pop_2005? É float ou int?
Fezter
3
Será que você só pode definir um tamanho de marcador único e espera um único valor flutuante e não uma série / lista / tupla ou flutuadores?
DerNincompoop 10/07
11
Valeria a pena lançar Pop_2005explicitamente para um número flutuante ou inteiro? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
Om_henners

Respostas:

7

Em geopandas> = 0,3 (lançado em setembro de 2017), a plotagem de pontos é baseada no scattermétodo de plotagem do matplotlib sob o capô, e isso aceita um tamanho de marcador variável.

Então agora você pode realmente passar uma coluna para o markersizeque o OP fez na pergunta original:

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á:

insira a descrição da imagem aqui

Obviamente, se seu objetivo é simplesmente alterar o tamanho do marcador para um valor constante diferente, você ainda pode passar um único float para a palavra-chave:

cities.plot(markersize=10)
joris
fonte