플롯에서 선택된 몇 가지 눈금 레이블을 수정하고 싶습니다.
예를 들어 내가 할 경우 :
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
글꼴 크기와 눈금 레이블의 방향이 변경됩니다.
그러나 시도하면
label.set_text('Foo')
눈금 레이블은 수정 되지 않습니다 . 또한 내가하는 경우 :
print label.get_text()
아무것도 인쇄되지 않습니다.
좀 더 이상합니다. 내가 이것을 시도했을 때 :
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
빈 문자열 만 인쇄되지만 플롯에는 ‘0.0’, ‘0.5’, ‘1.0’, ‘1.5’및 ‘2.0’으로 레이블이 지정된 눈금이 포함됩니다.
답변
주의 사항 : 눈금 레이블이 이미 문자열로 설정되어 있지 않으면 (예 : 상자 그림의 경우와 같이) matplotlib보다 최신 버전에서는 작동하지 않습니다 1.1.0
. 현재 github 마스터에서 작업하는 경우 작동하지 않습니다. 문제가 무엇인지 잘 모르겠습니다. 의도하지 않은 변경 일 수도 있고 아닐 수도 있습니다.
일반적으로 다음 라인을 따라 무언가를 수행합니다.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# We need to draw the canvas, otherwise the labels won't be positioned and
# won't have values yet.
fig.canvas.draw()
labels = [item.get_text() for item in ax.get_xticklabels()]
labels[1] = 'Testing'
ax.set_xticklabels(labels)
plt.show()
너무 많은 후프를 뛰어 넘어야하는 이유를 이해하려면 matplotlib의 구조에 대해 조금 더 이해해야합니다.
Matplotlib은 명시 적으로 지시되지 않는 한 진드기 등의 “정적”위치 지정을 의도적으로 피합니다. 플롯과 상호 작용하기를 원하므로 플롯, 눈금, 눈금 레이블 등의 범위가 동적으로 변경된다는 가정이 있습니다.
따라서 지정된 눈금 레이블의 텍스트를 설정할 수 없습니다. 기본적으로 플롯이 그려 질 때마다 축의 로케이터 및 포맷터에 의해 재설정됩니다.
그러나 로케이터 및 포맷터가 정적 ( 각각 FixedLocator
및)으로 설정된 FixedFormatter
경우 눈금 레이블은 동일하게 유지됩니다.
이것은 무엇 set_*ticklabels
이나 ax.*axis.set_ticklabels
한다.
다행히도 개별 눈금 레이블을 변경하는 것이 약간 복잡한 이유에 대해 매우 명확하게 알 수 있기를 바랍니다.
종종, 실제로하고 싶은 것은 단지 특정 위치에 주석을 달아주는 것입니다. 이 경우 annotate
대신을 살펴보십시오 .
답변
pylab 과 xticks 로도이 작업을 수행 할 수 있습니다
import matplotlib
import matplotlib.pyplot as plt
x = [0,1,2]
y = [90,40,65]
labels = ['high', 'low', 37337]
plt.plot(x,y, 'r')
plt.xticks(x, labels, rotation='vertical')
plt.show()
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
답변
최신 버전에서 matplotlib
여러 개의 str
값으로 눈금 레이블을 설정하지 않으면 ''
기본적으로 설정됩니다 (플롯이 그려 질 때 레이블은 단순히 눈금 값입니다). 원하는 출력을 얻으려면 다음과 같은 것이 필요합니다.
>>> from pylab import *
>>> axes = figure().add_subplot(111)
>>> a=axes.get_xticks().tolist()
>>> a[1]='change'
>>> axes.set_xticklabels(a)
[<matplotlib.text.Text object at 0x539aa50>, <matplotlib.text.Text object at 0x53a0c90>,
<matplotlib.text.Text object at 0x53a73d0>, <matplotlib.text.Text object at 0x53a7a50>,
<matplotlib.text.Text object at 0x53aa110>, <matplotlib.text.Text object at 0x53aa790>]
>>> plt.show()
그리고 결과 :
그리고 지금 당신이 체크하면 _xticklabels
, 그들은 더 이상 무리가 아닙니다''
.
>>> [item.get_text() for item in axes.get_xticklabels()]
['0.0', 'change', '1.0', '1.5', '2.0']
버전에서 1.1.1rc1
현재 버전 까지 작동합니다 2.0
.
답변
이 질문을한지 오래되었습니다. 오늘 ( matplotlib 2.2.2
) 현재 및 일부 읽기 및 시험 후 가장 좋은 방법은 다음과 같습니다.
하기 matplotlib라는 이름의 모듈이 ticker
있음을 “지원을 완벽하게 구성 틱 찾기 및 서식에 클래스가 포함되어 있습니다”를 . 줄거리에서 특정 눈금을 수정하려면 다음이 작동합니다.
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np
def update_ticks(x, pos):
if x == 0:
return 'Mean'
elif pos == 6:
return 'pos is 6'
else:
return x
data = np.random.normal(0, 1, 1000)
fig, ax = plt.subplots()
ax.hist(data, bins=25, edgecolor='black')
ax.xaxis.set_major_formatter(mticker.FuncFormatter(update_ticks))
plt.show()
경고! x
틱의 값이며 pos
축에서 순서대로 상대 위치입니다. 인덱싱 할 때 평소가 아닌로 pos
시작 하는 값을 사용 합니다.1
0
필자의 경우 y-axis
히스토그램 형식 을 백분율 값 으로 형식화하려고했습니다 . 이전과 같이 별도의 함수를 정의 할 필요없이 쉽게 할 수있는 mticker
다른 클래스 PercentFormatter
가 있습니다.
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np
data = np.random.normal(0, 1, 1000)
fig, ax = plt.subplots()
weights = np.ones_like(data) / len(data)
ax.hist(data, bins=25, weights=weights, edgecolor='black')
ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1.0, decimals=1))
plt.show()
이 경우 xmax
100 %에 해당하는 데이터 값입니다. 백분율은로 계산되므로이 x / xmax * 100
점을 수정해야 xmax=1.0
합니다. 또한 decimals
점 다음에 소수점 이하 자릿수입니다.
답변
axes 클래스에는 다음 과 같이 눈금 레이블을 설정할 수 있는 set_yticklabels 함수가 있습니다.
#ax is the axes instance
group_labels = ['control', 'cold treatment',
'hot treatment', 'another treatment',
'the last one']
ax.set_xticklabels(group_labels)
위의 예제가 왜 작동하지 않는지 여전히 연구 중입니다.
답변
이것은 작동합니다 :
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots(1,1)
x1 = [0,1,2,3]
squad = ['Fultz','Embiid','Dario','Simmons']
ax1.set_xticks(x1)
ax1.set_xticklabels(squad, minor=False, rotation=45)
답변
이것은 matplotlib 3에서도 작동합니다.
x1 = [0,1,2,3]
squad = ['Fultz','Embiid','Dario','Simmons']
plt.xticks(x1, squad, rotation=45)
