使用图案填充多边形而非颜色——Geopandas

5

我想用一些图案来填充多边形而不是颜色(因为我必须打印黑白项目)。到目前为止,我只能用灰度来填充它们,但如果有任何方法采用图案方式,我想尝试一下。

我的代码片段如下:

if info['max']=='catarro':
    poly = Polygon(shape, facecolor = "#DDDDDD", alpha = alpha, linewidtt = 0.01)
    plt.gca().add_patch(poly)

这个if语句嵌套在一个for循环里,它遍历info和shape。如果发现info的某个信息与字符串匹配,我会给一个多边形上色,并将其作为补丁添加到shapefile中。

我还想以某种方式将此模式添加到图例中。

提前致谢。

1个回答

9
最近在geopandas的提交中,可以通过将hatch参数传递给GeoDataFrame上的plot方法来进行操作。所以如果你从最新的源代码安装,并且有一个名为gdfGeoDataFrame,可以这样做:
gdf.plot(facecolor="#DDDDDD", hatch="//")

您可以基于匹配某个属性来绘制任何子集。从您的示例中,我对数据的结构还不太清楚,但类似这样:

gdf[gdf["key"] == value1].plot(facecolor="#DDDDDD", hatch="//")
gdf[gdf["key"] == value2].plot(facecolor="#DDDDDD", hatch="o")

等等。

最新的pip或conda上可用的geopandas没有这个功能。您仍然可以将hatch关键字传递给matplotlib.patches.Polygon(似乎是您在示例中使用的)来控制样式,像您在上面的示例中所演示的一样:

 poly = Polygon(shape, facecolor="#DDDDDD", alpha=alpha, linewidth=0.01, hatch="\\")

matplotlib图库中提供了更详细的填充演示。

要添加图例,您可以保留已绘制的多边形和相关标签的列表,并将其传递给legend。因此,在上面的循环内,可以添加以下内容:

polys.append(poly)
labels.append(search_str)

然后,在循环外面:

ax.legend(polys, labels)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接