首页 > 解决方案 > 防止来自双轴的网格线从原始轴绘制在艺术家的顶部

问题描述

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

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()似乎按照创建轴的顺序返回轴,但没有恢复它的选项。

或者也许甚至存在另一种解决方案?

例子

标签: pythonpython-3.xmatplotlibmultiple-axes

解决方案


您可以更改轴本身的 zorder。

ax.set_zorder(2)
ax2.set_zorder(1)
ax.patch.set_visible(False)

在此处输入图像描述


推荐阅读