>

x 축에이 형식과 같은 레이블이 있어야합니다

0 1 2 3 4 5 Xlabel

그러나 아래 코드를 시도하면 2 줄이 나타납니다

self.axes.set_xticks(np.arange(0,6,1))
self.axes.set_xlabel('Xlabel', fontsize=9,x=1,y=1)

=>내 결과 : (

0 1 2 3 4 5 
        Xlabel

  • 답변 # 1

    xlabel을 설정할 때 x  매개 변수는 축 단위로 위치를 지정하므로 0은 원점이고 1은 플롯의 오른쪽 가장자리입니다. 와이즈 비즈  눈금 바로 아래의 기본값 일 것으로 예상되므로 무시됩니다.

    이 동작을 무시하려면 y 를 사용하여 축 단위로 위치를 설정할 수 있습니다  와이즈 비즈  방법. 변형을 제공하여 다른 단위를 사용할 수도 있습니다.

    예 :

    Axis
    
    

    결과 :

    x 값 (1.05)을 선택하여 레이블을 축 프레임 외부에 배치했습니다. y 값 (-0.025)이 원하는 위치에 대한 최상의 추측으로 선택되었습니다. 변환을 사용하면 텍스트를 set_label_coords 에 맞춰 자동으로 배치 할 수 있습니다  라벨.

    수정 :

    다음은 변환을 사용하는 확장 된 예입니다. 텍스트의 크기와 정렬 방법을 고려하지 않기 때문에 마지막 ticklabel의 변환을 사용하는 것이 반드시 도움이되지는 않습니다. 따라서 다소 원하는 효과를 얻으려면 1) 내 x 레이블에 동일한 글꼴 크기를 사용하고 2) 세로 정렬 (va)을 '위'에 배치하고 3) 가로 정렬을 '왼쪽'에 배치해야했습니다. 각 눈금에 대한 변환은 x의 데이터 단위 (x 축이므로) 및 y의 축 단위 (0 ~ 1)에 대해 설정되지만 x 축에서 고정 패딩 (픽셀)으로 대체됩니다.

    import matplotlib.pyplot as plt
    import numpy as np
    ax = plt.gca()
    ax.set_xticks(np.arange(0,6,1))
    label = ax.set_xlabel('Xlabel', fontsize = 9)
    ax.xaxis.set_label_coords(1.05, -0.025)
    plt.savefig('labelAtEnd.png')
    plt.show()
    
    

    결과 :

  • 답변 # 2

    @Yann이 이미 말한 내용 외에도 실제로 Tick 로이 작업을 수행하는 것이 더 쉽습니다. . 확대/축소 할 때도 올바른 위치에 유지됩니다.

    import matplotlib.pyplot as plt
    import numpy as np
    ax = plt.gca()
    ax.set_xticks(np.arange(0,6,1))
    ax.set_yticks(np.arange(0,6,1))
    label = ax.set_xlabel('xlabel', ha='left', va = 'top', )#fontsize = 9)
    # need to draw the figure first to position the tick labels
    fig = plt.gcf()
    fig.draw(fig.canvas.get_renderer())
    # get a tick and will position things next to the last one
    ticklab = ax.xaxis.get_ticklabels()[0]
    trans = ticklab.get_transform()
    ax.xaxis.set_label_coords(5.1, 0, transform=trans)
    plt.savefig('labelAtEnd2.png')
    plt.show()
    
    

  • 답변 # 3

    @JoeKington 방법을 사용하는 변형은 다음과 같습니다. . 마지막 눈금 레이블을 축 이름으로 변경합니다. 먼저 마지막 틱을 빈 문자열로 설정 한 다음 annotate ()를 사용합니다. 축 레이블의 글꼴 크기를 제어해야하기 때문에 annotate ()를 사용했습니다.

    annotate
    
    

    어쩌면 누군가가이 작업을 수행하는 더 우아한 방법을 알고있을 것입니다. 엄청나게 복잡한 작업이기 때문입니다.

  • 답변 # 4

    @JoeKington에서 제공 한 솔루션을 사용합니다. import matplotlib.pyplot as plt import matplotlib as mpl ticklabelpad = mpl.rcParams['xtick.major.pad'] fig, ax = plt.subplots() ax.set_xlim([0, 5]) # Add the label as annotation. The "5" is the padding betweent the right side # of the axis and the label... ax.annotate('XLabel', xy=(1,0), xytext=(5, -ticklabelpad), ha='left', va='top', xycoords='axes fraction', textcoords='offset points') plt.show() 에 의해 생성 된 텍스트에 레이블 글꼴 속성을 부여하는 확장 .

    축 레이블의 형식이 다른 텍스트와 다른 경우 중요합니다.

    import numpy as np
    import matplotlib.pyplot as plt
    plt.xlim(50, 70)
    plt.ylim(100, 250)
    ax = plt.gca()
    # clears last tick label
    xticks = ax.get_xticks().tolist()
    xticks[-1] = ''
    ax.set_xticklabels(xticks)
    yticks = ax.get_yticks().tolist()
    yticks[-1] = ''
    ax.set_yticklabels(yticks)
    # sets axes labels on both ends
    ax.annotate('$t$', xy=(0.98, 0), ha='left', va='top', xycoords='axes fraction', fontsize=20)
    ax.annotate('$x$', xy=(0, 1), xytext=(-15,2), ha='left', va='top', xycoords='axes fraction', textcoords='offset points', fontsize=20)
    plt.show(block=True)
    
    

    ax.annotate(...)

  • 이전 multithreading - Java 서블릿에서의 정적 변수 동작
  • 다음 distribution - Linux 전용 소프트웨어 패키징