matplotlib共享x轴但不显示两者的x轴刻度标签,只有一个

the*_*ame 78 python matplotlib

我正在使用python + matplotlib,我有两个共享轴的图.如果您尝试graph1.set_xticklabels([])在共享轴时进行设置,则它无效,因为它是共享的.有没有办法共享轴并能够隐藏一个图的x轴?

Joe*_*ton 106

这是使用共享轴时常见的问题.

幸运的是,有一个简单的解决方法:用于plt.setp(ax.get_xticklabels(), visible=False)使标签在一个轴上不可见.

这相当于[label.set_visible(False) for label in ax.get_xticklabels()],不管它的价值. setp将自动对可迭代的matplotlib对象以及单个对象进行操作.

举个例子:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')

ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')

plt.setp(ax1.get_xticklabels(), visible=False)

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

替代文字

  • 我遇到了反问题:第二个子图上的标签不会显示.所以我用这样的命令:``plt.setp(ax2.get_yticklabels(),visible = True)``.工作完美无瑕. (6认同)

esm*_*mit 43

根据matplotlib-users上的一个帖子,你可以使用

import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
    try:
        ax.label_outer()
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

  • `try` 是必需的,因为并非 `plt.gcf().axes` 列表的所有元素都保证是 `subplot` 实例(使用 `label_outer` 方法)。 (2认同)

小智 14

你可以使用Axes.tick_params():

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex=ax1)

ax1.tick_params(labelbottom=False)
Run Code Online (Sandbox Code Playgroud)

  • 在相反的情况下,设置 labelbottom=True 为我解决了这个问题。谢谢。 (2认同)

Imp*_*est 6

您可以在子图创建期间使用plt.subplotsas共享轴

fig, axes = plt.subplots(nrows=2, sharex=True)
Run Code Online (Sandbox Code Playgroud)

这将自动关闭内轴的刻度标签。

完整示例:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, sharex=True)

axes[0].plot([1,2,3])
axes[1].plot([3,2,1])

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

在此处输入图片说明