matplotlib는 x 축을 공유하지만 둘 다에 대해 x 축 눈금 레이블을 표시하지 않습니다.


80

저는 python + matplotlib를 사용하고 있고 축을 공유하는 두 개의 플롯이 있습니다. graph1.set_xticklabels([])축을 공유하면서 설정하려고하면 공유되기 때문에 효과가 없습니다. 축을 공유하고 한 플롯의 x 축을 숨길 수있는 방법이 있습니까?

답변:


115

이것은 공유 축을 사용할 때 흔히 발생하는 문제입니다.

다행히도 간단한 수정이 있습니다. 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()

대체 텍스트


8
역 문제가있었습니다. 두 번째 서브 플롯의 레이블이 표시되지 않습니다. 그래서 다음과 같이 명령을 사용했습니다 plt.setp(ax2.get_yticklabels(), visible=True). 완벽하게 일했습니다.
n1000 2014

49

matplotlib-users 의 스레드 당 다음을 사용할 수 있습니다.

import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
    try:
        ax.label_outer()
    except:
        pass

1
받아 들여진 답변보다 훨씬 더 도움이되기 때문에 더 많이 찬성 할 수 있기를 바랍니다. 가시성을 제거하는 대신 수정하려는 유일한 상황은 서브 플롯에 있습니다. 당신의 대답은이 경우 훨씬 더 똑똑합니다. 감사!
Channing Moore

try필요한가요? 그것 없이는 괜찮아 보입니다.
EL_DON 2010 년

1
tryplt.gcf().axes목록 의 모든 요소 가 subplot인스턴스 ( label_outer메서드 사용) 가 보장되는 것은 아니기 때문에 필요합니다 .
esmit

16

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)

labelbottom = True로 설정하면 반대의 경우에 해결되었습니다. 감사.
mclzc

반대의 경우에도 나를 위해 일했지만 plt.setp (ax [1] .get_yticklabels (), visible = True)는 그렇지 않았습니다.
deckard

5

서브 플롯 생성 중에 다음과 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()

여기에 이미지 설명 입력


하지만 틱을 플롯의 반대쪽으로 이동하려고하면 레이블이 다시 표시됩니다. /
endolith

네, 그렇습니다. 특별한 경우에는 다시 보이지 않게 설정해야합니다.
ImportanceOfBeingErnest

label_outer()작동하는 것 같습니다 stackoverflow.com/a/12751192/125507
endolith

예, 여기에있는 모든 답변이 질문에 답합니다!?
ImportanceOfBeingErnest

0

안타깝게도 esmit의 답변 (제 생각에 가장 좋은 해결책 인 esmit 덕분에)에 대해 언급 할 수 없으므로 새로운 답변으로 의견을 작성해야합니다. 그의 솔루션을 간단한 함수에 넣었습니다.

def remove_inner_ticklabels(fig):
    for ax in fig.axes:
        try:
            ax.label_outer()
        except:
            pass

전에 전화 할 수 있습니다 plt.show(). Joe Kington의 답변은 어떤 이유로 저에게 효과가 없었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.