是否可以设置更高的轴标签 z 索引?

Nar*_*asK 7 python matplotlib

在以下代码中,轴的标签隐藏在图形线后面:

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C,S = np.cos(X), np.sin(X)

plt.plot(X,C)
plt.plot(X,S)

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

plt.yticks([-1, 0, +1],
           [r'$-1$', r'$0$', r'$+1$'])

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(14)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.75 ))

plt.show()
Run Code Online (Sandbox Code Playgroud)

余弦/正弦

你可以看到,例如-pi很难看到。有没有办法将轴标签放在前面?

Don*_*kby 6

尽管欧内斯特的回答非常有帮助,但我发现rcParams界面有点笨拙。幸运的是,您可以使用方法axisbelow直接在轴上设置选项。这是代码的修补版本。set_axisbelow()

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C,S = np.cos(X), np.sin(X)

plt.plot(X,C)
plt.plot(X,S)

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

plt.yticks([-1, 0, +1],
           [r'$-1$', r'$0$', r'$+1$'])

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

ax.set_axisbelow(False)  # <-- added

for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(14)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.75 ))

plt.show()
Run Code Online (Sandbox Code Playgroud)

现在情节看起来像Nicolas P. Rougier 的教程所说的那样:

刻度标签的白色背景固定图

  • 这很奇怪,但是当有任何艺术家的 zorder 高于 2.5 时,ax.set_axisbelow(False) 无法将轴带到最前面。 (3认同)

Imp*_*est 5

有一个rcParameter axes.axisbelow可以精确控制这种行为:

axes.axisbelow:绘制轴网格线和刻度线

  • 低于补丁(True);
  • 位于补丁上方但位于线条下方('line');
  • 或最重要的是(错误)

如果你设置

plt.rcParams["axes.axisbelow"] = False
Run Code Online (Sandbox Code Playgroud)

在脚本的顶部,网格线和刻度线(标签)绘制在其他所有内容之上。结果看起来像

在此输入图像描述