matplotlib에서 x 축 스케일 변경


95

Matlab을 사용하여이 플롯을 만들었습니다.

여기에 이미지 설명 입력

matplotlib를 사용하여 x 축은 100000, 200000, 300000과 같은 큰 숫자를 그립니다. 실제로 100000, 200000, 300000임을 나타 내기 위해 1, 2, 3 및 10 ^ 5와 같은 값을 갖고 싶습니다.

matplotlib에서 이러한 규모를 만드는 간단한 방법이 있습니까?

답변:


146

다음을 사용해보십시오 matplotlib.pyplot.ticklabel_format.

import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))

a x 10^bx 축 눈금에 과학적 표기법 (예 :)을 적용합니다.


9
오프셋을 추가 할 수 있습니까? (예 : 0.0, 0.5, 1.0, 1.5, ... 및 x 10 ^ b 대신 0, 5, 10, 15, ... 및 x 10 ^ {b-1})
Eagle

24
ticklabel_format축 객체에 대한 방법이기도합니다. 다음과 같이 시도해 볼 수 있습니다.ax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
Covich

2 개의 플롯으로 구성된 서브 플롯이있는 경우 어떻게 작동 할 수 있습니까?
FaCoffee

2
@Eagle 죄송합니다. 오프셋 추가에 대한 후속 질문은 제가 언급 한 내용이었습니다. 내 x 축은 조정 된 지수를 [0.1, 0.2, ...]선호 [1, 2, ...]합니다. 이에 대한 해결책을 찾을 수 있었습니까?
trianta2

나는 또한 질문 trianta2에 관심이 @Eagle 언급
벤 우스만에게

15

이것은 귀하의 질문 본문에있는 쿼리 중 하나에 대한 원래 질문에 대한 답변이 아닙니다.

내 이름이 이상해 보이지 않도록 약간의 서문 :

import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )

앞서 언급했듯이 ticklabel_format을 사용하여 matplotlib가 크거나 작은 값에 대해 과학적 표기법을 사용하도록 지정할 수 있습니다.

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')

rcParams (matplotlib import rcParams에서)의 플래그를 사용하거나 직접 설정하여 이것이 표시되는 방식에 영향을 줄 수 있습니다. 나는 '1e'와 'x10 ^'사이의 과학적 표기법을 다음보다 더 우아한 방식으로 바꾸는 방법을 찾지 못했습니다.

ax.xaxis.major.formatter._useMathText = True

이것은 당신에게 더 많은 Matlab-esc를 제공하고 실제로 더 나은 모습을 보여줄 것입니다. 다음이 똑같이해야한다고 생각합니다.

rc('text', usetex=True)

11

스칼라 포맷터 지원은 지수를 수집. 문서는 다음과 같습니다.

class matplotlib.ticker.ScalarFormatter (useOffset = True, useMathText = False, useLocale = None) 기준 : matplotlib.ticker.Formatter

틱 위치는 평범한 오래된 숫자입니다. useOffset == True이고 데이터 범위가 데이터 평균보다 훨씬 작은 경우 눈금 레이블이 의미가 있도록 오프셋이 결정됩니다. 과학적 표기법은 데이터 <10 ^ -n 또는 데이터> = 10 ^ m에 사용됩니다. 여기서 n 및 m은 set_powerlimits ((n, m))를 사용하여 설정된 전력 한계입니다. 이들에 대한 기본값은 axes.formatter.limits rc 매개 변수에 의해 제어됩니다.

당신의 기술은 다음과 같습니다.

from matplotlib.ticker import ScalarFormatter
xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3))  # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)

형식에 표시된 지수를 얻으려면 x10^5ScalarFormatter를 useMathText=True.

애프터 이미지

다음을 사용할 수도 있습니다.

xfmt.set_useOffset(10000)

다음과 같은 결과를 얻으려면 :

여기에 이미지 설명 입력


3
와 ScalarFormatter의 인스턴스를 useMathText=True얻는을 x10^4.
호프만 틸

9

나는 간단한 해결책을 찾음

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.