[英]Why does matplotlib choose the wrong range in y using log scale?
使用matplotlib 1.5.1版和python 2.7.11版時,我注意到我需要在y中手動指定限制,否則僅繪制最大的y值點。 數組的行為方式相同。
如果我刪除第一個要點,我將獲得更多要點,但不是全部。
我不記得以前曾經必須手動設置限制-為什么在這里?
import matplotlib.pyplot as plt
X = [0.997, 2.643, 0.354, 0.075, 1.0, 0.03, 2.39, 0.364, 0.221, 0.437]
Y = [15.487507, 2.320735, 0.085742, 0.303032, 1.0, 0.025435, 4.436435,
0.025435, 0.000503, 2.320735]
plt.figure()
plt.subplot(1,2,1)
plt.scatter(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.subplot(1,2,2)
plt.scatter(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.ylim(0.5*min(Y), 2.0*max(Y)) # why is this line necessary?
plt.title('added plt.ylim()')
plt.show()
出現問題是因為您首先繪制了散點圖,然后將比例設置為對數,這會導致放大效果。 這消除了問題:
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)
這將產生預期的結果。 (您問題中的第二個子圖。)
看起來matplotlib
會在轉換為對數刻度之前創建y軸刻度,然后不根據更改重新創建刻度。 第一個子圖的y軸開始於10e1,而不是10e-3。 因此,在繪制之前更改比例。
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)
我認為,如果在對數刻度旁邊繪制原始刻度,則可能可以找出matplotlib
對軸進行部分處理的答案。 在對數標度中,不存在真正的0 -因為log(0)是未定義的。 因此,坐標必須從大於0的某處開始,這會引起問題。 您的x軸范圍是0到3,而y的范圍是0到16。當轉換為log時, matplotlib
正確縮放x軸,但是由於y的倍數為10,所以它會丟失縮放比例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.