叠加在笛卡尔图上的极坐标图中元素的matplotlib zorder
-
21-12-2019 - |
题
我在控制叠加在笛卡尔图上的极坐标图元素的zorder时遇到了困难。
考虑这个例子:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)
ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()
结果是:
它看起来像 matplotlib
忽略了 zorder
散点图。我希望红星在蓝星之上。
你能解释一下我在这里做错了什么吗?
我发现 一个问题, ,这有点类似于我的,但涉及刻度线和网格。也许是同一个bug?
附:我正在使用Python2.7.6和matplotlib1.3.1运行Linux x86_64。
解决方案
问题是您正在设置不同轴上的标记的z顺序 ax
和 ax2
但从那以后 ax2
有一个更大的z阶,所有的图将在上面 ax
.一个解决方案可能是设置一个更高的z阶 ax
但随后你需要使背景透明或设置 frameon=False
(这可能不适合你的情况),这是我所说的一个示范:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)
ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)
ax.set_zorder(3)
ax.patch.set_facecolor('none')
#ax.patch.set_visible(False)
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()
情节:
不隶属于 StackOverflow