2014-11-11 6 views
2

반 - 로그 플롯 (로그 - 선형 스타일, y- 축의 대수 눈금)에서 플롯하는 데이터가 있습니다. y 축 눈금 레이블을 실제 값에서 로그 값으로 변경하는 방법이 있습니까? 나는 더 작게 만드는 방법을 알고하지 않습니다 enter image description herePython, matplotlib : 눈금 레이블 값을 로그 값으로 설정하는 방법

(죄송합니다 그것이 가지 큰 다음 플롯을 생성

import matplotlib.pyplot as plt 
import numpy as np 

x=np.array([1,2,3,4,5]) 
def f(x): 
    return 10**(x-1) 

plt.plot(x,f(x)) 
plt.yscale(u'log') 

plt.show() 

:

는 예를 들어, 다음 코드를 고려 자유롭게 편집 할 수 있습니다.)

이 플롯에서 눈금 레이블은 10^0, 10^1, 10^2 등으로 표시됩니다. 0, 1, 2 등으로 표시 할 수 있습니다.

plt.plot(x,f(x))plt.plot(x,np.log10(f(x)))으로 변경 한 다음 y 축을 대수 대신 선형으로 다시 만들 수 있습니다. 어쨌든 matplotlib가 y 축 틱 값을 바꿀 수 있다는 것을 알기 위해서는 을 내 모든 plt.plot()에 넣지 않아도됩니다. 내 이유는이 두 가지입니다 : 내 코드에서 많은 plt.plot() 줄이 있고 오히려 되돌아 가지 않고 모두 변경해야 할 것입니다, 그리고 나서 대수적으로 간격을 둔 작은 눈금이 없을 것입니다. 선형 축으로도이를 변경할 수있는 방법이 있습니다).

편집 : 나는 내 비슷한 부분이 있지만 동일하지 않은 this question을 알고 있습니다. 그 질문에있는 사람은 눈금 표시를 과학적 형식에서 "정상적인"십진수 형식으로 변경하려고합니다. 눈금 표시를 과학적 형식에서 숫자의 대수 (기수 10) 값으로 변경하고 싶습니다. 나는 대답이 내가 링크 된 것과 비슷할 것이라고 확신하지만 그것을 어떻게하는지 분명하지 않습니다. 사실, 나는 그 질문을 내 앞에 올리기 전에 보았지만, 내 문제에 그것을 적용하는 방법을 몰랐기 때문에 여전히 나의 것을 게시하기로 결정했다. 아마도 경험이 많은 프로그래머에게 나는 내 상황과 연결된 질문의 방법을 적용하는 방법이 분명하지만 내게는 분명하지 않다.

코드 샘플을 복사하여 (코드 샘플을 복사하고 필요한 라인을 넣음으로써) 어떻게 작동하는지 제가 고맙겠습니다.

+0

사용 포매터 http://matplotlib.org/examples/api/date_index_formatter.html 날짜 포맷이 최고의 목표 링크입니다 –

+0

확실하지 않다. .. @PaulH – tacaswell

+1

[로그 스케일] (http://matplotlib.org/examples/pylab_examples/log_demo.html)을 사용하십시오. [갤러리 페이지] (http://matplotlib.org/gallery.html)를보고 원하는 것을 검색해야합니다. – will

답변

1

당신은 예를 들어, 사용자 정의 포맷터를 사용할 수 있습니다

import matplotlib.pyplot as plt 
from matplotlib.ticker import FuncFormatter 
import numpy as np 
import math 

x=np.array([1,2,3,4,5]) 

def f(x): 
    return 10**(x-1) 

plt.plot(x,f(x)) 
plt.yscale(u'log') 

#SET CUSTORM TICK FORMATTING 
plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x,y: '{}'.format(math.log(x, 10)))) 

plt.show()