饼图和 geopandas 地图
Pie charts and geopandas map
我想在我的地图上表示每个区域内的种族分布。
我是 geopandas 的新手,直到现在我只能制作一张地图,按地区显示一个民族的份额。
我的代码如下:
geodf.plot(column="resid_preto", cmap="Blues", figsize=(20,12),
edgecolor='black', linewidth=0.5, alpha=0.9, legend=False)
plt.axis('off')
其中 'resid_preto' 是包含区域内黑人人口比例的列
我想制作一张这样的地图。所以,我可以在一张地图上代表所有种族群体,而不是为每个群体创建一张地图
据我所知,geopandas
没有直接的方法来做到这一点。但是将它与来自 pyplot
的散点相结合可以获得所需的结果。
第一个技巧是获取要绘制饼图的 x,y
坐标。在我的例子中,我将 geopandas
的 centroid
工具与 x 和 y 方法一起使用,例如,x 和 y 坐标由(i
是 geopandas DataFrame 中的行索引)给出:
centroids = geo_df.centroid
x_coord = centroids.x[i]
y_coord = centroids.y[i]
下一步是使用 pyplot 创建一个 pie chart 并存储返回的结构,其中包括带有饼图楔形的补丁列表:
wedges=plt.pie([1,1,1])
第三步是创建一个绘图对象,然后使用 plot API 绘制 geopandas DataFrame,例如,
fig, ax = plt.subplots(1, 1)
geo_df.boundary.plot(ax=ax,zorder=1,edgecolor='black')
最后,使用散点图将饼图添加到 geopandas 图的顶部。 for
循环是添加从 plot.pie([1,1,1])
获得的 3 个楔子中的每一个(如果有更多楔子,只需更改它。必须有更多 efficient/elegant 方法来执行此操作):
piecolor=['b','g','y']
for j in range(3):
ax.scatter([x_coord],[y_coord],marker=(wedges[0][j].get_path().vertices.tolist()),facecolor=piecolors[j], s=800)
plt.show()
诀窍是将非默认标记传递给 scatter
,在本例中为楔形。对于 wedges
中的每个元素,首先获取路径,然后获取顶点,最后将其转换为列表,这就是标记。
我想在我的地图上表示每个区域内的种族分布。
我是 geopandas 的新手,直到现在我只能制作一张地图,按地区显示一个民族的份额。
我的代码如下:
geodf.plot(column="resid_preto", cmap="Blues", figsize=(20,12),
edgecolor='black', linewidth=0.5, alpha=0.9, legend=False)
plt.axis('off')
其中 'resid_preto' 是包含区域内黑人人口比例的列
我想制作一张这样的地图。所以,我可以在一张地图上代表所有种族群体,而不是为每个群体创建一张地图
据我所知,geopandas
没有直接的方法来做到这一点。但是将它与来自 pyplot
的散点相结合可以获得所需的结果。
第一个技巧是获取要绘制饼图的 x,y
坐标。在我的例子中,我将 geopandas
的 centroid
工具与 x 和 y 方法一起使用,例如,x 和 y 坐标由(i
是 geopandas DataFrame 中的行索引)给出:
centroids = geo_df.centroid
x_coord = centroids.x[i]
y_coord = centroids.y[i]
下一步是使用 pyplot 创建一个 pie chart 并存储返回的结构,其中包括带有饼图楔形的补丁列表:
wedges=plt.pie([1,1,1])
第三步是创建一个绘图对象,然后使用 plot API 绘制 geopandas DataFrame,例如,
fig, ax = plt.subplots(1, 1)
geo_df.boundary.plot(ax=ax,zorder=1,edgecolor='black')
最后,使用散点图将饼图添加到 geopandas 图的顶部。 for
循环是添加从 plot.pie([1,1,1])
获得的 3 个楔子中的每一个(如果有更多楔子,只需更改它。必须有更多 efficient/elegant 方法来执行此操作):
piecolor=['b','g','y']
for j in range(3):
ax.scatter([x_coord],[y_coord],marker=(wedges[0][j].get_path().vertices.tolist()),facecolor=piecolors[j], s=800)
plt.show()
诀窍是将非默认标记传递给 scatter
,在本例中为楔形。对于 wedges
中的每个元素,首先获取路径,然后获取顶点,最后将其转换为列表,这就是标记。