极坐标图和笛卡尔坐标图重叠时的matplotlib元素顺序

3

我遇到了一个问题,就是在笛卡尔坐标系上叠加极坐标图元素时无法控制它们的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()

结果如下:

结果是:enter image description here

看起来matplotlib忽略了散点图的zorder。我期望红色的星在蓝色的星上方。

请问我在这里做错了什么?

我发现了一个类似我的问题的帖子,但它涉及刻度线和网格,也许是同样的错误?

P.S. 我正在运行Linux x86_64,使用Python 2.7.6和matplotlib 1.3.1。

1个回答

3
问题在于您正在设置不同轴上标记的z-order,其中axax2,但由于ax2具有更高的z-order,因此其中所有绘图都将位于ax之上。一种解决方法可能是将ax的z-order设置得更高,但那么您需要使背景透明或设置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()

情节:

输入图像描述


2
是的,这正是我所怀疑的。不幸的是,我找不到有关matplotlib如何处理zorder的好文档。例如,是否存在跨轴zorder这样的东西?问题在于我的ax的背景确实不透明。我想我可以在ax2上绘制红色星星,但坐标变成了极坐标,定位和缩放变得很麻烦。 - abudis

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