matplotlib共享x轴但只显示一个的x轴刻度标签

111 投票
5 回答
100562 浏览
提问于 2025-04-16 07:14

我正在使用Python和matplotlib,并且想让两个图表共享一个坐标轴。如果你尝试使用 graph1.set_xticklabels([]) 来隐藏一个图表的x轴标签,但因为它们共享坐标轴,所以这样做没有效果。有没有办法既能共享坐标轴,又能隐藏其中一个图表的x轴呢?

5 个回答

39

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

这个 tick_params 方法在另一种情况下也能用,就是当子图的 x 轴标签最开始是隐藏的时候:

fig, (ax1, ax2) = plt.subplots(2, sharex="all")
ax1.tick_params(labelbottom=True)
63

根据在 matplotlib-users 论坛上的讨论,你可以使用以下代码:

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

在使用共享坐标轴的时候,常常会遇到一些小问题。

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

撰写回答