使用GeoPandas更改绘图中的标记大小


10

我有一个带有点和一些关联数据的地理数据框。我想使用geopandas将其绘制在地图上,并使点的大小与geodataframe中的列之一相对应。

到目前为止,我有以下代码:

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

但我收到以下错误: TypeError: cannot convert the series to <class 'float'>

有任何想法吗?


这是全部代码吗?
Fezter

@Fezter就是绘制地图的所有代码。还有更多用于构建地理数据框的代码,但此处似乎并不相关。这里有什么重要的遗漏吗?谢谢。
Juan Francisco Saldarriaga

Pop_2005的字段类型是什么?它是float还是int?
Fezter

3
可能是您只能设置单个标记大小,并且期望单个浮点值,而不是系列/列表/元组或浮点数吗?
derNincompoop

1
值得Pop_2005显式转换为浮点数或整数吗?geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Answers:


7

在> = 0.3的大熊猫(2017年9月发布)中,点的绘制基于scatter引擎盖下matplotlib 的绘制方法,并且接受可变标记大小。

因此,现在您实际上可以将列传递给markersize,OP在原始问题中做了什么:

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

给出:

在此处输入图片说明

当然,如果您的目标只是将markersize更改为其他常数值,您仍然可以将单个float传递给关键字:

cities.plot(markersize=10)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.