2017-10-18 8 views
0

가까운 해결책을 찾았지만 내 축을 정확하게 레이블링 할 수 없습니다. 나는 작은 것을 놓치고있다.로그 데이터를 matplotlib에 플로팅 할 때 선형 y 축 스케일링 유지

방사성 붕괴 곡선이 직선으로 표시됩니다.

나는 데이터의 2 개 목록이 예상대로 나는 scatter(hours,np.log(activity),color='red')

y 축이 np.log (활동)로 나오는 사용하여 플롯하지만 난 선형 플롯을 유지하면서 단지 활동을하게하고 싶습니다.

a.yaxis.set_major_formatter(ticker.FormatStrFormatter("%d")) 나는 틱 레이블을 원하는대로 변경할 수 있지만 틱 레이블에는 목록을 할당 할 수 없습니다. 예를 들어 % d을 (를) activity [0]으로 바꾸면 모든 틱이 해당 값을 사용합니다.

나는 무엇을하려고하는지 여기에서 분명히 희망한다.

여기에 내가 y 축을 곱하면된다하려는 모든 np.exp에 의해 틱

(Y-틱)

환호

참조 플롯

답변

1

내가 scatter(hours, activity)을 그릴 것 , 로그 배율로 얻으려면 ax.set_yscale('log'), 마지막으로 ax.set_major_formatter(ScalarFormatter())을 사용하여 틱 레이블을 일반 숫자 (기본값은 과학 표기법)로 표시합니다.

당신이 정말로 log(activity) (피팅 목적이나 뭔가를) 플롯해야하는 경우, 원래의 질문에 대한 답변은 다음과 같습니다

ax.yaxis.set_major_formatter(FuncFormatter(lambda y, pos: "%.3f"%(np.exp(y)))) 

https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.FuncFormatter

+0

첫 번째 포인트는 그러나 다른 내 원래의 방법이었다 참조 그때 피팅 메신저 제대로 표시되지 않습니다. 로그 스케일 축은 선형 피팅을 엉망으로 만듭니다. 두 번째 요점은 내가 찾던 해결책이었습니다, tyvm! – PatfordS

+0

그 상황에서 저의 접근 방식은 일반적으로 로그 데이터에 선형 피팅을 수행 한 다음 원래 데이터의 로그 스케일 플롯에 'exp (m * x + b)'로 피팅을 플롯합니다. 다행이 다른 솔루션은 당신을 위해 일합니다! –