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

时间:2010-11-17 21:45:33

标签: python matplotlib

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

5 个答案:

答案 0 :(得分:104)

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

幸运的是,有一个简单的解决方法:使用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()

alt text

答案 1 :(得分:42)

根据matplotlib-users上的帖子,您可以使用

import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
    try:
        ax.label_outer()
    except:
        pass

答案 2 :(得分:11)

您可以使用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)

答案 3 :(得分:3)

您可以在创建子图期间使用plt.subplots作为

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

这将自动关闭内轴的勾选标签。

完整示例:

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

enter image description here

答案 4 :(得分:0)

不幸的是,我不允许对esmit的答案发表评论(这是我认为这是最好的解决方案,谢谢esmit),因此我必须将评论写为新答案:我将他的解决方案放入了一个简单的函数中

def remove_inner_ticklabels(fig):
    for ax in fig.axes:
        try:
            ax.label_outer()
        except:
            pass

您可以在plt.show()之前致电。乔·金顿的答案由于某种原因对我不起作用。