Python:Matplotlib补丁和等高线图

3

在使用PatchCollection时,有没有办法使圆的填充透明?我画了一个圆,尝试将facecolor设置为“none”,但它覆盖了它所在的等高线图。我希望能看到圆的轮廓,并保留其后面的等高线可见。

该立体网是使用第三方软件mplstereonet-0.2绘制的。以下是绘制图像的脚本部分:

hold(True)



fig, ax = plt.subplots(subplot_kw = dict(projection = 'stereonet')) # Schmidt by default

cax = ax.density_contourf(strike, dip, measurement = 'poles')

ax.pole(strike, dip, 'k^', markersize = 3)
ax.grid(True)


patches = []
circle = Circle((0, 0), 0.5, facecolor = 'none', fill = False)
patches.append(circle)
p = PatchCollection(patches)
ax.add_collection(p)

cbar = fig.colorbar(cax, cmap = cm)
cbar.set_clim(0, 25)

enter image description here

1个回答

3
我解决了这个问题,但还是要感谢可能会关注此问题的任何人。
解决方法:
    p = PatchCollection(patches, match_original = True)

这样做可以使轮廓在形状后面显示。

enter image description here


2
我正要回复。我的评论是,如果你只绘制一个圆,请避免使用整个PatchColection,并直接添加它:ax.add_artist(circle) - Rutger Kassies
1
不错。我本来想建议使用 ax.add_patch(circle),这个方法很好用(如果你只有一个 patch 的话就不需要使用 PatchCollection)。不过,你应该在问题中提供一个最小工作示例。 - jorgeca
2
只是提供信息,创建PatchCollection时也可以指定facecolor='none'(或使用p.set_facecolor)。之所以默认情况下制作集合时未匹配原始补丁的颜色,是因为集合通常用于加速绘制一堆几乎相同的艺术家,或将某些属性(如面颜色)映射到另一个标量(例如按z颜色)。 (另一方面,我甚至不知道“match_original”选项的存在。真方便!)正如其他人提到的,对于单个圆形,直接添加它就更容易了。祝你好运! - Joe Kington

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