用图案而不是颜色填充多边形 Geopandas

Gon*_*oso 5 python gis pandas geopandas

我正在尝试用某种图案而不是颜色填充多边形(因为我必须打印项目黑白)。到目前为止,我只设法用灰度填充它们,但如果有什么办法的话,我想采用图案方法。

我的一段代码如下:

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

该 if 语句位于 for 循环内,该循环运行信息和形状。如果某些信息事实与字符串匹配,我只需为多边形着色并将其作为补丁添加到形状文件上。

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

提前致谢。

jdm*_*cbr 9

最近对geopandas的提交允许将hatch参数传递给plotGeoDataFrame 上的方法,因此如果您从最新的源安装,并且您有一个GeoDataFrame命名的gdf,您可以执行以下操作:

gdf.plot(facecolor="#DDDDDD", hatch="//")
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据匹配的某些属性来绘制所需的任何子集。从你的例子中我有点不清楚你的数据是如何构造的,但类似:

gdf[gdf["key"] == value1].plot(facecolor="#DDDDDD", hatch="//")
gdf[gdf["key"] == value2].plot(facecolor="#DDDDDD", hatch="o")
Run Code Online (Sandbox Code Playgroud)

等等。

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

 poly = Polygon(shape, facecolor="#DDDDDD", alpha=alpha, linewidth=0.01, hatch="\\")
Run Code Online (Sandbox Code Playgroud)

matplotlib 库中提供了绘制剖面线的更完整演示。

要添加图例,您可以保留绘制的多边形和关联标签的列表,并将它们传递给legend. 所以,在上面的循环中,类似:

polys.append(poly)
labels.append(search_str)
Run Code Online (Sandbox Code Playgroud)

然后,在循环之外:

ax.legend(polys, labels)
Run Code Online (Sandbox Code Playgroud)