2017-05-04 5 views
0

matplotlib을 사용하여 플로팅 할 때 흥미로운 문제가 발생했습니다. 여기서 y 축은 매우 불편한 양으로 조정됩니다. 여기에 문제 보여주는 MWE입니다 :이 프로그램을 실행할 때matplotlib의 기본 축 오작동

import numpy as np 
import matplotlib.pyplot as plt 

l = np.linspace(0.5,2,2**10) 
a = (0.696*l**2)/(l**2 - 9896.2e-9**2) 

plt.plot(l,a) 
plt.show() 

, 나는이 picture

과 같은 그림을 얻을 명확하게 Y 데이터는 비록 바보 같은 양에 의해 조정되는 y 축 나는 t을 갈 필요가 왜 내에 아무 의미한다는 점에서 Axis numerical offset in matplotlib

나는이 질문에 대한 대답에 만족하지 않다 : 모든

1 ~ 2.이 질문과 유사하다 그는 데이터가 1과 2 사이에있을 때 (EDIT : 0과 1 사이) 축 설정을 변경하는 복잡한 과정입니다. 왜 이런 일이 생길까요? 왜 matplotlib는 그런 이상한 스케일링을 사용합니까?

+0

하는 분 (A)'와'최대의 (a)'의 y 데이터가'시도를 ** not ** ** 1에서 2 사이.'plt.ylim (0, 2)'에서도 볼 수 있듯이 값은 거의 일정합니다. 그래서 나는 그것을 '어리석은 양'이라고 부르지 않을 것입니다. – Michael

+0

Ack 잘못된 코드를 복사했는데 ipython을보고 바보 같은 실수를 저 지르려고했습니다. 죄송합니다! 그럼에도 불구하고 문제가 어디서 왔는지 궁금합니다. 어떤 상황에서도 라벨링은 그다지 유용하지 않습니다. 왜 matplotlib가 이것을합니까? –

+0

문제 없습니다! 모든 것이 예상대로 작동합니다. 다른 刻표를 원한다면, 질문 자체에서 원하는 것을 정확히 기재하십시오. – ImportanceOfBeingErnest

답변

0

플롯의 데이터는 모두 0.6960000000170.696000000273 사이입니다. 그러한 경우에는 어떤 종류의 오프셋을 사용하는 것이 좋습니다.

당신이 원하지 않는 경우, 당신은 당신에게 자신의 포맷터 사용할 수 있습니다

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker 

l = np.linspace(0.5,2,2**10) 
a = (0.696*l**2)/(l**2 - 9896.2e-9**2) 

plt.plot(l,a) 
fmt = matplotlib.ticker.StrMethodFormatter("{x:.12f}") 
plt.gca().yaxis.set_major_formatter(fmt) 
plt.show() 

enter image description here