从 PatchCollection 添加 matplotlib 颜色条

urs*_*rei 4 python matplotlib shapely

我将 Shapely MultiPolygon 转换为 PatchCollection,并首先为每个 Polygon 着色,如下所示:

# ldn_mp is a MultiPolygon
cm = plt.get_cmap('RdBu')
num_colours = len(ldn_mp)

fig = plt.figure()
ax = fig.add_subplot(111)
minx, miny, maxx, maxy = ldn_mp.bounds
w, h = maxx - minx, maxy - miny
ax.set_xlim(minx - 0.2 * w, maxx + 0.2 * w)
ax.set_ylim(miny - 0.2 * h, maxy + 0.2 * h)
ax.set_aspect(1)

patches = []
for poly in ldn_mp:
    colour = cm(1. * len(filter(poly.contains, points)) / num_colours)
    patches.append(PolygonPatch(poly, fc=colour, ec='#555555', lw=0.2, alpha=1., zorder=1))
pc = PatchCollection(patches, match_original=True)
ax.add_collection(pc)
ax.set_xticks([])
ax.set_yticks([])
plt.title("Density of NO$^2$ Sensors by Borough")
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是我想根据 PatchCollection 颜色为我的绘图添加一个颜色条。我不知道该怎么做;cmap创建时传递关键字pc?那么我如何使用我set_array()使用过的颜色进行调用?

Tro*_*sen 5

不久前我遇到了同样的问题。对于每个多边形,我将相应的颜色保存到名为 mycolors 的列表中:

mycolors=[]
...
mycolors.append(SSTvalue)
path_patch = patches.PathPatch(mypath, lw=1)
mypatches.append(path_patch)
Run Code Online (Sandbox Code Playgroud)

我循环了一系列存储在 Shapefile 中的多边形并将每个补丁存储在一个集合中。之后,我使用存储在列表中的颜色信息绘制了多边形,最终将其转换为数组,并添加了一个颜色条:

p = PatchCollection(mypatches, cmap=plt.get_cmap('RdYlBu_r'), alpha=1.0)
p.set_array(array(mycolors))
p.set_clim([np.ma.min(mycolors),np.ma.max(mycolors)])
plt.colorbar(p,shrink=0.5)
Run Code Online (Sandbox Code Playgroud)

我用来绘制温度值的完整脚本可以在这里找到。希望这可以帮助。干杯,特隆