matplotlib极坐标图中的元素叠加在笛卡尔图上

时间:2014-02-25 16:09:44

标签: python-2.7 matplotlib z-order polar-coordinates cartesian-coordinates

我很难控制叠加在笛卡尔图上的极坐标元素的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。我希望这颗红星能够位于蓝色之上。

请你解释我在这里做错了什么?

我找到了one question,这与我的相似,但关注的是滴答线和网格。也许这是同一个错误?

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

1 个答案:

答案 0 :(得分:2)

问题是你要设置不同轴axax2上的标记的z顺序,但由于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()

简介:

enter image description here