2017-05-04 75 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數據是一個愚蠢的數量比例所有的1和2

之間的這種類似的問題: Axis numerical offset in matplotlib

我不是滿意的回答這個問題,因爲它是沒有意義的我,爲什麼我需要去ŧ當數據在1和2之間時(編輯:在0和1之間),更改軸設置的複雜過程。爲什麼會發生?爲什麼matplotlib使用這種奇怪的縮放?

+0

嘗試'分鐘(一)'和'MAX(一)',在y數據**不**,介於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