用图案而不是颜色填充多边形 Geopandas
Fill polygon with pattern instead of color Geopandas
我正在尝试用某种图案而不是颜色来填充多边形(因为我必须打印黑白项目)。到目前为止,我只设法用灰度填充它们,但如果有任何方法,我想采用图案方法。
我的一段代码如下:
if info['max']=='catarro':
poly = Polygon(shape, facecolor = "#DDDDDD", alpha = alpha, linewidtt = 0.01)
plt.gca().add_patch(poly)
此 if 语句位于遍历 info 和 shape 的 for 循环中。如果信息的某些事实与字符串匹配,我只需为多边形着色并将其作为补丁添加到 shapefile 上。
我也想以某种方式将这种模式添加到图例中。
提前致谢。
最近对 geopandas 的提交允许将 hatch
参数传递给 GeoDataFrame 上的 plot
方法,因此如果您从最新源安装,并且您有一个 GeoDataFrame
命名为 gdf
,你可以这样做:
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="\")
中提供了更完整的绘制影线演示。
要添加图例,您可以保留绘制的多边形和相关标签的列表,并将它们传递给 legend
。所以,在你上面的循环中,是这样的:
polys.append(poly)
labels.append(search_str)
然后,在你的循环之外:
ax.legend(polys, labels)
我正在尝试用某种图案而不是颜色来填充多边形(因为我必须打印黑白项目)。到目前为止,我只设法用灰度填充它们,但如果有任何方法,我想采用图案方法。
我的一段代码如下:
if info['max']=='catarro':
poly = Polygon(shape, facecolor = "#DDDDDD", alpha = alpha, linewidtt = 0.01)
plt.gca().add_patch(poly)
此 if 语句位于遍历 info 和 shape 的 for 循环中。如果信息的某些事实与字符串匹配,我只需为多边形着色并将其作为补丁添加到 shapefile 上。
我也想以某种方式将这种模式添加到图例中。
提前致谢。
最近对 geopandas 的提交允许将 hatch
参数传递给 GeoDataFrame 上的 plot
方法,因此如果您从最新源安装,并且您有一个 GeoDataFrame
命名为 gdf
,你可以这样做:
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="\")
中提供了更完整的绘制影线演示。
要添加图例,您可以保留绘制的多边形和相关标签的列表,并将它们传递给 legend
。所以,在你上面的循环中,是这样的:
polys.append(poly)
labels.append(search_str)
然后,在你的循环之外:
ax.legend(polys, labels)