2013-12-19 1 views
7

내가matplotlib 눈금 레이블을 계산 된 값으로 바꾸는 올바른 방법은 무엇입니까?

enter image description here

축 로그와 그림을 가지고 있고이 축이 오히려 값보다 값의 로그를 틱 레이블을 다시 지정하고 싶은 자신

enter image description here

방법 나는 이것을 달성했습니다.

plt.axes().set_xticklabels([math.log10(x) for x in plt.axes().get_xticks()]) 

이것을하기위한 덜 복잡한 방식은 없습니다.

matplotlib의 원래 틱 값에서 계산 된 값을 사용하여 체계적으로 레이블을 다시 지정하는 데 올바른 이디엄은 무엇입니까?

+0

는'Formatter', 당신은 그냥'plt.xticks (x_ticks를 사용할 수 있습니다 x_ticklabels)'를 사용하여 미리 정의 된'x_ticks'의 각 틱에 미리 정의 된'x_ticklabels'을 넣습니다. – mikey

답변

6

Formatter 클래스를 살펴보십시오. 진드기에 텍스트를 넣지 않는 한 set_xticklabels 또는 set_yticklabels을 거의 절대 사용하지 않아야합니다. 이것은 당신의 진드기 라벨을 당신과 완전히 분리시킵니다. 보기 제한을 조정하면 눈금 레이블이 동일하게 유지됩니다. 귀하의 경우에는

는 포맷터는 이미 존재 :

matplotlib.ticker.LogFormatterExponent doc

fig, ax = plt.subplots() 
ax.loglog(np.logspace(0, 5), np.logspace(0, 5)**2) 
ax.xaxis.set_major_formatter(matplotlib.ticker.LogFormatterExponent()) 

일반적으로 당신이 FuncFormatter를 사용할 수 있습니다. FuncFomatter 사용 방법의 예는 matplotlib: change yaxis tick labels을 참조하십시오. 당신이 사용하지 않는 경우

당신이 코멘트에 JoeKington에서 정확하게 올려 원하는에 대한 간결한 예를 들어, :

ax.xaxis.set_major_formatter(
    FuncFormatter(lambda x, pos: '{:0.1f}'.format(log10(x)))) 
+0

메모에서'LogFormatterExponent'는 몇 가지 단점을 가지고 있습니다 (예 : 음수 값의 과학 표기법으로 전환). 이 경우에는'FuncFormatter'를 사용하는 것이 더 낫습니다. OP의 레퍼런스에서,'FuncFormatter'는 값과 위치라는 두 개의 인수를 취하는 함수를 기대합니다. 예 :'FuncFormatter (lambda x, pos : '{: 0.1f}'. 형식 (log10 (x)))'. –

+0

정수가 아닌 과학 표기법으로 음수 지수를 형식화합니다. 또한 (더 중요하게) 필자는'matplotlib' 플롯에서 원래의 틱 값에서 계산 된 값을 사용하여 'Formatter'가있는 경우가 아니라 일반적으로 * 틱을 재 지정하는 관용어에 대해 궁금합니다. – orome

+0

@JoeKington 허, 재미있다. 나는이 질문에 대답하면서'LogFormatterExponent'를 발견했다. 음화에 대한 그 행동의 이유를 아십니까? – tacaswell