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()

结果是: 在此处输入图像描述

它看起来像matplotlib忽略了zorder散点图。我希望红星在蓝星之上。

你能解释一下我在这里做错了什么吗?

我发现了一个问题,这与我的有点相似,但涉及的是刻度线和网格。也许这是同一个错误?

PS 我正在使用 Python 2.7.6 和 matplotlib 1.3.1 运行 Linux x86_64。

4

1 回答 1

3

问题是您正在设置不同轴上标记的 z 顺序,ax但是ax2由于ax2z 顺序更大,因此其中的所有图都将位于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()

阴谋:

在此处输入图像描述

于 2014-02-25T16:46:15.227 回答