【Python】그림의 눈금 라벨을 취득·편집
10703 단어 파이썬matplotlib
import matplotlib.pyplot as plt
이나 fig = plt.figure()
를 전제로 하고 있습니다.요약
파이썬으로 출력 된 다이어그램의 눈금 레이블을 얻으려면,
라는 절차가 필요합니다.
또는 직접 labs의 요소를 다시 써도 편집할 수 있습니다(예: labs[0].set_va( 'top' ))
후자의 방법이, 캐릭터 라인 이외의 편집도 가능하기 때문에 편리한 경우도 있습니다.
~이하 해설~
눈금 획득
눈금 문자열을 얻을 수 없을 때
파이썬이 기본적으로 출력하는 눈금을 얻어도 라벨 정보가 포함되지 않을 수 있습니다.
예를 들면
plt.plot( [ 5, 7, 6 ] )
실행하면 아래 그림이 표시되지만,
이 눈금을 취득해도, 라벨의 정보는 ''
가 되어 있습니다. plt.xticks()
의 두 번째 반환 값은 문자열이 아닌 matplotlib.text.Text
객체 목록이므로 .get_text()
라는 메서드로 문자열을 가져옵니다.
xlocs, xlabs = plt.xticks()
print( xlocs ) # [-0.5 0. 0.5 1. 1.5 2. 2.5 3. 3.5]
print( [ xlab.get_text() for xlab in xlabs ] ) # ['', '', '', '', '', '', '', '', '']
ylocs, ylabs = plt.xticks()
print( ylocs ) # [4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5]
print( [ ylab.get_text() for ylab in ylabs ] ) # ['', '', '', '', '', '', '', '', '']
더 말하면, 지금 출력되고 있는 그림의 눈금보다 상하 좌우에 여분의 눈금(가로축의 -0.5등)이 포함되어 있습니다.
이것은 Python 측이 「눈금은 현재 미확정으로, 이후도 추가 편집에 따라 적절히 조정합니다」라고 하는 상태이기 때문입니다.
stackoverflow: Getting empty tick labels before showing a plot in Matplotlib
그림의 확정 → 눈금 문자열의 취득이 가능하게
따라서 그림을 일단 확정시키기 위해 plt.draw()
또는 fig.canvas.draw()
를 실행합니다.
그러면 눈금의 문자열도 확정되므로 (표시되는 그림은 변하지 않지만) 그림에 표시되어 있는 문자열을 취득할 수 있게 됩니다.
plt.plot( [ 5, 7, 6, 8 ] )
plt.draw()
xlocs, xlabs = plt.xticks()
print( xlocs ) # [-0.5 0. 0.5 1. 1.5 2. 2.5 3. 3.5]
print( [ xlab.get_text() for xlab in xlabs ] ) # ['−0.5', '0.0', '0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5']
ylocs, ylabs = plt.yticks()
print( ylocs ) # [4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5]
print( [ ylab.get_text() for ylab in ylabs ] )
# ['4.5', '5.0', '5.5', '6.0', '6.5', '7.0', '7.5', '8.0', '8.5']
눈금 레이블 업데이트
이 단계에서도 상하좌우의 여분의 눈금이 포함되어 있으므로, 무편집에서도 다시 plt.xticks( xlocs, xlabs )
plt.xticks( xlocs, xlabs )
plt.yticks( ylocs, ylabs )
따라서 그림의 범위를 바꾸고 싶지 않은 경우에는 xlim()
xmin, xmax = plt.xlim()
ymin, ymax = plt.ylim()
plt.xticks( xlocs, xlabs )
plt.yticks( ylocs, ylabs )
plt.xlim( xmin, xmax )
plt.ylim( ymin, ymax )
# === OR ===
plt.xticks( xlocs[1:-1], xlabs[1:-1] )
plt.yticks( ylocs[1:-1], ylabs[1:-1] )
matplotlib.text.Text 클래스에 직접 액세스
위에서는 눈금 레이블의 문자열을 일단 취득했습니다만, ylim()
그리고 얻어지는 matplotlib.text.Text 클래스에 직접 액세스 하는 것으로, 눈금의 체재를 1개씩 편집할 수 있습니다.
편집하려면 아래 페이지의 메소드 목록 (xlocs[1:-1]
)을 사용하십시오. 예를 들어,
matplotlib 공식: matplotlib.text.Text
xlocs, xlabs = plt.xticks()
xlabs[3].set_color( 'red' )
xlabs[5].set_va( 'center' )
그러면, 가로축의 일부의 색, 높이를 바꾸고 있습니다.
이를 활용하면 눈금 라벨이 길어질 때 라벨을 교대로 표시할 수도 있습니다.
stackoverflow: Aligning rotated xticklabels with their respective xticks
plt.plot( [ 5, 7, 6 ] )
xlocs, xlabs = plt.xticks()
print( xlocs ) # [-0.5 0. 0.5 1. 1.5 2. 2.5 3. 3.5]
print( [ xlab.get_text() for xlab in xlabs ] ) # ['', '', '', '', '', '', '', '', '']
ylocs, ylabs = plt.xticks()
print( ylocs ) # [4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5]
print( [ ylab.get_text() for ylab in ylabs ] ) # ['', '', '', '', '', '', '', '', '']
plt.plot( [ 5, 7, 6, 8 ] )
plt.draw()
xlocs, xlabs = plt.xticks()
print( xlocs ) # [-0.5 0. 0.5 1. 1.5 2. 2.5 3. 3.5]
print( [ xlab.get_text() for xlab in xlabs ] ) # ['−0.5', '0.0', '0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5']
ylocs, ylabs = plt.yticks()
print( ylocs ) # [4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5]
print( [ ylab.get_text() for ylab in ylabs ] )
# ['4.5', '5.0', '5.5', '6.0', '6.5', '7.0', '7.5', '8.0', '8.5']
이 단계에서도 상하좌우의 여분의 눈금이 포함되어 있으므로, 무편집에서도 다시
plt.xticks( xlocs, xlabs )
plt.xticks( xlocs, xlabs )
plt.yticks( ylocs, ylabs )
따라서 그림의 범위를 바꾸고 싶지 않은 경우에는
xlim()
xmin, xmax = plt.xlim()
ymin, ymax = plt.ylim()
plt.xticks( xlocs, xlabs )
plt.yticks( ylocs, ylabs )
plt.xlim( xmin, xmax )
plt.ylim( ymin, ymax )
# === OR ===
plt.xticks( xlocs[1:-1], xlabs[1:-1] )
plt.yticks( ylocs[1:-1], ylabs[1:-1] )
matplotlib.text.Text 클래스에 직접 액세스
위에서는 눈금 레이블의 문자열을 일단 취득했습니다만, ylim()
그리고 얻어지는 matplotlib.text.Text 클래스에 직접 액세스 하는 것으로, 눈금의 체재를 1개씩 편집할 수 있습니다.
편집하려면 아래 페이지의 메소드 목록 (xlocs[1:-1]
)을 사용하십시오. 예를 들어,
matplotlib 공식: matplotlib.text.Text
xlocs, xlabs = plt.xticks()
xlabs[3].set_color( 'red' )
xlabs[5].set_va( 'center' )
그러면, 가로축의 일부의 색, 높이를 바꾸고 있습니다.
이를 활용하면 눈금 라벨이 길어질 때 라벨을 교대로 표시할 수도 있습니다.
stackoverflow: Aligning rotated xticklabels with their respective xticks
xlocs, xlabs = plt.xticks()
xlabs[3].set_color( 'red' )
xlabs[5].set_va( 'center' )
Reference
이 문제에 관하여(【Python】그림의 눈금 라벨을 취득·편집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aisha/items/3a4f2e402d0b5fe05da8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)