Python matplotlib共享x轴,但不共享';t显示两个的x轴标记标签,仅显示一个
我使用的是python+matplotlib,两个绘图共享一个轴。如果您在共享轴时尝试设置Python matplotlib共享x轴,但不共享';t显示两个的x轴标记标签,仅显示一个,python,matplotlib,Python,Matplotlib,我使用的是python+matplotlib,两个绘图共享一个轴。如果您在共享轴时尝试设置graph1.setxticklabels([]),则它没有效果,因为它是共享的。有没有办法共享轴并能够隐藏一个绘图的x轴?这是使用共享轴时常见的问题 幸运的是,有一个简单的修复方法:使用使标签仅在一个轴上不可见 这相当于ax.getxticklabels()中标签的[label.set_visible(False)],不管它值多少钱setp将自动对matplotlib对象的iterable以及单个对象进行
graph1.setxticklabels([])
,则它没有效果,因为它是共享的。有没有办法共享轴并能够隐藏一个绘图的x轴?这是使用共享轴时常见的问题
幸运的是,有一个简单的修复方法:使用使标签仅在一个轴上不可见
这相当于ax.getxticklabels()中标签的[label.set_visible(False)]
,不管它值多少钱setp
将自动对matplotlib对象的iterable以及单个对象进行操作
例如:
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()
在每个线程上,您可以使用
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
可以在创建子地块期间与as共享轴 这将自动关闭内部轴的标签 完整示例:
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()
您可以使用:
不幸的是,我不允许对esmit的答案发表评论(这是我认为最好的解决方案,谢谢esmit),因此我必须将我的评论作为一个新的答案来写:我将他的解决方案放入一个简单的函数中
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass
您可以在
plt.show()之前调用它。乔·金顿(Joe Kington)的回答出于某种原因对我不起作用。我希望我能更进一步,因为它比公认的答案更有帮助。唯一需要修改可见性而不是仅仅消除可见性的情况是在子地块上;在这种情况下,你的答案要聪明得多。谢谢为什么需要try
?没有它似乎很好。try
是必需的,因为并不是plt.gcf()的所有元素。axes
列表保证是subplot
实例(使用label\u outer
方法)。我遇到了相反的问题:第二个子地块上的标签不会显示。因此,我像这样使用了您的命令:plt.setp(ax2.get\u yticklabels(),visible=True)
。工作正常。但是如果您尝试将刻度移到绘图的另一侧,标签会返回:/Yes true,在这种特殊情况下,您需要再次将其设置为不可见。label_outer()
似乎工作正常是的,这里的所有答案都回答了问题!?设置labelbottom=True在相反的情况下为我解决了这个问题。谢谢。在相反的情况下也为我工作,而plt.setp(ax[1].get_-yticklabels(),visible=True)没有。
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)
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass