matplotlib共享x轴但只显示一个的x轴刻度标签
我正在使用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()