2013-02-08 7 views
25

축의 눈금 레이블 형식에 문제가 있습니다. 나는하여 Y_AXIS 오프셋 비활성화 :matplotlib 축 레이블 형식

ax1.ticklabel_format(style = 'sci', useOffset=False) 

하고 그것을 과학적 형식을 넣어 시도했지만 내가 가진 전부입니다

0.00355872 

하지만이 같은 예상 :

3.55872...E-2 

또는 비슷한.

내가 정말 원하는 것은 무엇인가와 같은 :

3.55872... (on the tick label) 
x 10^2 (or something similar - on the axis label) 

내가 정적으로 레이블을 설정을 시도 할 수 있습니다 ,, 그러나 결국 내가 수십 또는 다른 값을 가진 플롯의 수백이있을 것이다, 그래서 동적으로 설정해야합니다.

대신 y_axis 오프셋을 레이블로 배치하는 방법도 있지만이 방법에 대한 실마리가 없습니다.

답변

24

당신은 단지 전력 제한을 조정할 수 할 수있는 방법은 여러 가지가있을 수있는 권한을 설정 (doc)

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1)) 

ScalerFormatter 과학적 표기법

로 전환 또는, 당신은 할 수 FuncFormatter을 사용하면 제어력이 뛰어납니다 (하지만 발을 날려 버릴 수 있음).

from matplotlib import ticker 

scale_pow = 2 
def my_formatter_fun(x, p): 
    return "%.2f" % (x * (10 ** scale_pow)) 
ax1.get_xaxis().set_major_formatter(ticker.FuncFormatter(my_formatter_fun)) 
ax1.set_xlabel('my label ' + '$10^{{{0:d}}}$'.format(scale_pow)) 

FuncFormatter(doc) 문자열을 반환하고 레이블의 형식을 해당 기능을 사용하는 2 인자 기능을합니다. (대화식 그림의 모서리에 값이 표시되는 방식도 변경됩니다.) 두 번째 인수는 포매터가 레이블을 만들 때 전달되는 인수 인 'position'을위한 것입니다. 당신은 그것을 무시할 수는 있지만 그것을 취해야한다. (틀린 인수로부터 오류를 얻는다.) 이것은 모든 포맷터의 통합 API와 대화식으로 마우스의 위치를 ​​표시하기 위해 포맷터를 사용하는 결과입니다.

+0

멋진 FuncFormatter를 사용했지만 'ax1.get_yaxis(). set_major_formatter (ticker.FuncFormatter (lambda x, p : "% 2f"% (x * (10 ** scale_pow))))) '. 단지 몇 가지 의심 : 나는 아직도 '람다'와 'p'가 무엇인지 이해하지 못합니다. 많은 감사! :) – jorgehumberto

+0

'FuncFormatter'는 두 개의 인자를 가진 함수를 원합니다. 'lambda x, p : do something'은 두 개의 인자 ('x'와'p')를 받아들이고 당신이해야 할 일을 수행합니다. [튜토리얼을 보려면 여기를 참고하십시오.] –

+0

@jorgehumber가'lambda'를 제거하고'p'에 대해 약간의 설명을 추가했습니다. 'lambda'는'def'를 사용하여 함수를 만드는 단지 방법 일뿐입니다.이 대답을 위해 꼭 필요하지 않은 fancy-pants python입니다. 필요 이상으로 복잡하게 만들어서 죄송합니다. – tacaswell

33

또한 축과 임계 값 한계를 지정해야합니다 : 그림은 [0.01, 99] 범위를 벗어 때

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2)) 

Y 축에 공상 과학 형식을 사용합니다.

+1

간단하고 나를 위해 일했습니다. +1 – user3208430