防止双轴上的网格线从原始轴上绘制在艺术家的顶部

时间:2019-05-05 20:19:53

标签: python python-3.x matplotlib multiple-axes

我有一个轴,可以在其中绘制一些数据,还有另一个双轴,可用于在特定刻度位置(原始轴的刻度除外)绘制网格线:

import matplotlib.pyplot as plt
import numpy as np

f, ax = plt.subplots()
ax.set_xlim([0, 1])
ax2 = ax.twiny()
ax2.set_xlim([0, 1])
ax2.set_xticks(np.linspace(0, 1, 11))
ax2.xaxis.grid()
x = np.linspace(0, 1, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.legend()
plt.show()

现在,这会产生不良影响,即在原始图例的图例和线图的顶部绘制双轴的网格线。据我了解,这是因为matplotlib会按照创建轴的顺序绘制轴,因此zorder不会有帮助(因为zorder仅指定单个轴的艺术家之间的顺序)

我知道我可以将数据绘制在双轴ax2上(紧随ax2.legend()之后),但我希望按原样进行设置。而是更改两个轴的绘制顺序应该可以解决问题,但是我不知道该怎么做。 f.get_axes()似乎按照创建时的顺序返回了轴,但没有还原它的选项。

也许还有其他解决方案?

Example

1 个答案:

答案 0 :(得分:3)

您可以更改轴本身的zorder。

cl /?

enter image description here