Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib共享x轴,但不共享';t显示两个的x轴标记标签,仅显示一个_Python_Matplotlib - Fatal编程技术网

Python matplotlib共享x轴,但不共享';t显示两个的x轴标记标签,仅显示一个

Python matplotlib共享x轴,但不共享';t显示两个的x轴标记标签,仅显示一个,python,matplotlib,Python,Matplotlib,我使用的是python+matplotlib,两个绘图共享一个轴。如果您在共享轴时尝试设置graph1.setxticklabels([]),则它没有效果,因为它是共享的。有没有办法共享轴并能够隐藏一个绘图的x轴?这是使用共享轴时常见的问题 幸运的是,有一个简单的修复方法:使用使标签仅在一个轴上不可见 这相当于ax.getxticklabels()中标签的[label.set_visible(False)],不管它值多少钱setp将自动对matplotlib对象的iterable以及单个对象进行

我使用的是python+matplotlib,两个绘图共享一个轴。如果您在共享轴时尝试设置
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