我正在使用Python + Matplotlib,我有两个图表需要共享一个轴。如果你尝试在共享轴的情况下设置graph1.set_xticklabels([])
,它将没有效果,因为它是被共享的。是否有一种方法可以共享轴并且能够隐藏一个图表的 x 轴?
我正在使用Python + Matplotlib,我有两个图表需要共享一个轴。如果你尝试在共享轴的情况下设置graph1.set_xticklabels([])
,它将没有效果,因为它是被共享的。是否有一种方法可以共享轴并且能够隐藏一个图表的 x 轴?
当使用共享轴时,这是一个常见的陷阱。
幸运的是,有一个简单的解决方法:使用 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()
根据 matplotlib-users 的一个帖子,你可以使用以下方法:
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
try
?好像没有它也可以。 - EL_DONtry
是因为 plt.gcf().axes
列表的所有元素都不能保证是 subplot
实例(具有 label_outer
方法)。 - esmit您可以使用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)
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()
label_outer()
似乎有效 https://dev59.com/bG855IYBdhLWcg3wq2XL#12751192 - endolith很遗憾,我没有权限对esmit的答案进行评论(在我看来是最好的解决方案,谢谢esmit),因此我必须将我的评论作为一个新答案写出来:我将他的解决方案放入了一个简单的函数中。
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass
在plt.show()
之前,您可以调用此函数。由于某种原因,Joe Kington的答案对我不起作用。
plt.setp(ax2.get_yticklabels(), visible=True)
。结果完美无瑕。 - n1000