Matplotlib은 눈금 레이블의 글꼴 크기를 작게 만듭니다.


299

matplotlib 그림에서 눈금 레이블의 글꼴 크기를 ax1.set_xticklabels()작게 사용하려면 어떻게해야합니까?

또한 어떻게 수평에서 수직으로 회전시킬 수 있습니까?


이 질문을 해 주셔서 감사합니다. 지금이 문제를 해결하려고합니다. 나는 여기에 강력하게 의견을 밝히지 않았지만 유권자들이 최선의 대답이 받아 들여진 것이 아니라고 생각하는 것 같습니다. 어떻게 생각해?
Aaron Hall

matplotlib에서 글꼴 크기를 변경하는 적어도 5 가지 방법이 있다는 것을 올바르게 읽었습니까? : D
famargar

답변:


127

최신 버전의 MPL에는이 작업에 대한 바로 가기가 있습니다. 이 질문에 대한 다른 답변에 예가 나와 있습니다. https://stackoverflow.com/a/11386056/42346

아래 코드는 설명을위한 것이며 반드시 최적화 할 필요는 없습니다.

import matplotlib.pyplot as plt
import numpy as np

def xticklabels_example():
    fig = plt.figure() 

    x = np.arange(20)
    y1 = np.cos(x)
    y2 = (x**2)
    y3 = (x**3)
    yn = (y1,y2,y3)
    COLORS = ('b','g','k')

    for i,y in enumerate(yn):
        ax = fig.add_subplot(len(yn),1,i+1)

        ax.plot(x, y, ls='solid', color=COLORS[i]) 

        if i != len(yn) - 1:
            # all but last 
            ax.set_xticklabels( () )
        else:
            for tick in ax.xaxis.get_major_ticks():
                tick.label.set_fontsize(14) 
                # specify integer or one of preset strings, e.g.
                #tick.label.set_fontsize('x-small') 
                tick.label.set_rotation('vertical')

    fig.suptitle('Matplotlib xticklabels Example')
    plt.show()

if __name__ == '__main__':
    xticklabels_example()

여기에 이미지 설명을 입력하십시오


84
따로 : 눈금 레이블 객체를 반복하는 대신을 사용할 수 있습니다 plt.setp. (또한,보고에서이 ax.tick_params예를 들어)을, 당신은 할 수 있습니다 plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14). 또한 axes 객체에는 ax.is_last_row()예제와 같은 경우에 편리한 방법이 있습니다. 대신 if i != len...할 수 있습니다 if not ax.is_last_row(). (이것이 방법이기 때문에 나는 실마리가 없다 ... Matplotlib는 속성을 싫어한다!)
Joe Kington

@ 조 :이게 처음 들었어 is_last_row(), 고마워! 나는 plt.setp과거에 사용해 왔으며 반드시 눈금 레이블을 사용자 정의하는보다 정식적인 방법을 나타내는 것은 확실하지 않았습니다. 당신은 그 의심을 제거했습니다. 감사합니다. 더 광범위하게 : 특히 matplotlib태그 에있는 답변은 종종 나를 경 외롭게합니다. 앞으로도 힘써주세요.
mechanical_meat

1
감사!! 친절한 말, 특히 당신에게서 감사합니다! 이 경우 정식은 매우 상대적입니다. plt.setp"matlab-ism"이고, 명시 적 루프는 아마도 훨씬 더 파이썬입니다. MATLAB 개종자는 나 자신 setp이 자연 스럽지만 각각 자신에게 느껴집니다. 하나는 꽤 읽을 수 있습니다, imo
Joe Kington

50
새 버전에서는 labelsize 매개 변수 를 사용해야한다는 것을 알았습니다 . 예 :ax.tick_params(axis='x', labelsize=8)
Vladtn

해야 get_ticklabels하지get_major_ticks
제즈

505

실제로 더 간단한 방법이 있습니다. 방금 찾았습니다.

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

# We change the fontsize of minor ticks label 
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)

이것은 label귀하의 질문 의 일부 크기에만 답변합니다 .


2
axis = 'x'또는 axis = 'y'축을 사용 하여 하나만 수정
loved.by.Jesus

221

글꼴 크기와 회전을 동시에 지정하려면 다음을 시도하십시오.

plt.xticks(fontsize=14, rotation=90)

4
이것은 MATLAB과 같은 pyplot 인터페이스로 작업 할 때 사용됩니다. 객체 지향 인터페이스의 경우 좌표축 객체의 tick_params () 메소드 또는 축 객체의 set_tick_params () 메소드를 사용해야합니다 (다른 답변 참조).
wombatonfire

54

또는 다음을 수행 할 수 있습니다.

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 

36
plt.tick_params(axis='both', which='minor', labelsize=12)

이것은 새 레이블을 설정하지 않고 글꼴 크기를 변경하려는 경우 작동하는 유일한 대답입니다.
David Stansby

@DavidStansby 나는 이것이 사실이라고 생각하지 않습니다. 나는이 정확한 문제 (위에 언급)를 가지고이 솔루션과 다른 대체 방법을 사용할 수있었습니다. 사용ax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson

1
가장 간단한 대답은 ax 객체에 대한 참조가 필요하지
않음

26

다른 대안

두 개의 플롯이 나란히 있으며 눈금 레이블을 개별적으로 조정하고 싶습니다.

위의 솔루션은 가까이 있었지만 나에게 적합하지 않았습니다. 이 matplotlib 페이지 에서 솔루션을 찾았습니다 .

ax.xaxis.set_tick_params(labelsize=20)

이것은 속임수를 쓰고 요점을 바로 잡았습니다. 내 유스 케이스의 경우 조정해야 할 오른쪽 그림이였습니다. 새 눈금 레이블을 생성 한 이후 왼쪽의 플롯에 대해 레이블 설정 과 동일한 프로세스에서 글꼴을 조정할 수있었습니다 .

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

그래서 나는 올바른 음모에 사용했습니다.

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

미묘한 미묘함 ... 알아요 ...하지만 누군가에게 도움이되기를 바랍니다 :)

규모 순서 레이블의 글꼴 크기를 조정하는 방법을 아는 경우 보너스 포인트.

여기에 이미지 설명을 입력하십시오


22

Matplotlib의 현재 버전에서 할 수 있습니다 axis.set_xticklabels(labels, fontsize='small').


1
그렇게하면 labels너무 지정해야합니다 . 글꼴 크기 만 변경할 수 있다면 더 좋습니다.
Guimoute

16

fontsize와 같은 레이블 표시 매개 변수를 다음과 같은 행으로 변경할 수도 있습니다.

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]

1
부작용이있는 목록 이해를 사용하는 것이 가장 좋은 방법은 아니라고 생각합니다. 대신 표준 for 루프를 사용하는 것이 좋습니다.
jjmontes

14

더 작은 글꼴의 경우

ax1.set_xticklabels(xticklabels, fontsize=7)

그리고 작동합니다!


xticklabel을 어떻게 정의합니까?
mLstudent33

10

다음은 나를 위해 일했습니다.

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

위의 장점은 당신이 제공 할 필요가 없습니다됩니다 arraylabels상의 모든 데이터와 작품 axes.

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