在Geopandas绘图中更新补丁边缘颜色

3

我使用以下代码(geopandas 0.2.1,matplotlib 2.0.2,在Jupyter笔记本上使用%inline)绘制了一个地理数据框作为等值图:

fig, ax = plt.subplots(
    1,
    figsize=(16., 12.),
    dpi=100,
    subplot_kw=dict(aspect='equal'),
)

base = imd_gdf.dropna().plot(
    ax=ax,
    alpha=1.,
    column="Rental_Count",
    scheme="fisher_jenks",
    k=7,
    cmap="viridis",
    linewidth=0.1,
    edgecolor='black',
    legend=True,
)

这将给我一个带有多边形周围边缘的地图:

enter image description here

我想要把这些边缘去掉。到目前为止,我尝试遍历所有补丁,将边缘颜色设置为面颜色:

for p in ax.patches:
    nc = p.get_facecolor()
    p.set_edgecolor(nc) 

但是,即使在循环中指定单个颜色,也没有效果。无论是 p.set_color(nc) 还是尝试使用 p.set_linewidth(0.0) 将线宽设置为 0 都没有任何效果。

我错过了什么?以相同的方式更新面颜色使用 p.set_facecolor('white') 正常工作:

enter image description here


当您在调用plot方法时将边缘颜色设置为字符串"none",会发生什么? - Paul H
@PaulH 将其设置为'none'会使边缘以白色绘制。 - urschrei
1个回答

2
所以,原来plot()绘制了一系列线对象(AxesSubplotlines属性,它们是lines.Line2D),表示实际边缘。如果你想完全控制边缘外观,更新这些对象以及补丁(AxesSubplot.patches)的边缘属性是必要的。

2022年4月更新

新版本的Geopandas(0.10+)有一个额外的missing_kwds字典,可以传递给plot()函数,以便在绘制分级图时绘制具有给定输入column参数的NaN值的几何图形。这将导致绘制一个新的子PatchCollection,并且它总是(截至此版本,可能会改变?)ax._children的第二个子项。

因此,如果要修改这两个独立的PatchCollections的绘制方式,则需要执行以下操作:

fig, ax = plt.subplots(..., missing_kwds={facecolor='#000000'}, ...)
df.plot(...)
# NaN polygons
c = ax._children[1]
c.set_edgecolors(#000000) # match the facecolor in missing_kwds
c.set_zorder(1) # this ensures it's drawn last

# Drawn polygons
c2 = ax._children[0]
c2.set_edgecolors(retained_ec)
c2.set_zorder(2) # this ensures it's drawn first

# now call plt.savefig, plt.show etc

你如何访问lines.Line2D?谢谢 - MorningGlory
@MorningGlory 不知道你是否解决了问题,但我发布了一个更新,如果还没有解决的话可能会有帮助。 - urschrei

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