【发布时间】:2010-11-17 21:45:32
【问题描述】:
我正在使用 python + matplotlib,我有两个图共享一个轴。如果您在共享轴时尝试设置graph1.set_xticklabels([]),则它没有效果,因为它是共享的。有没有办法共享轴并能够隐藏一个绘图的 x 轴?
【问题讨论】:
标签: python matplotlib
我正在使用 python + matplotlib,我有两个图共享一个轴。如果您在共享轴时尝试设置graph1.set_xticklabels([]),则它没有效果,因为它是共享的。有没有办法共享轴并能够隐藏一个绘图的 x 轴?
【问题讨论】:
标签: python matplotlib
这是使用共享轴时的常见问题。
幸运的是,有一个简单的解决方法:使用 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()
【讨论】:
plt.setp(ax2.get_yticklabels(), visible=True)。完美运行。
每个matplotlib-users 上的线程,你可以使用
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
【讨论】:
try?没有它似乎很好。
try 是必需的,因为并非plt.gcf().axes 列表的所有元素都保证是subplot 实例(使用label_outer 方法)。
你可以使用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() 似乎工作stackoverflow.com/a/12751192/125507
很遗憾,我不允许对 esmit 的答案发表评论(这是我认为最好的解决方案,感谢 esmit),所以我必须将我的评论写成新的答案:我将他的解决方案放入一个简单的函数中
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass
您可以在plt.show() 之前致电。由于某种原因,乔·金顿的回答对我不起作用。
【讨论】: