簡體   English   中英

為什么matplotlib需要在plt.scatter()之前設置日志比例而不是plt.plot()?

[英]Why does matplotlib require setting log scale before plt.scatter() but not plt.plot()?

我在這個有用的答案中發現,當在y軸上使用plt.plot()plt.scatter()plt.plot()行為會有所不同。

使用plot ,我可以在使用plt.show()之前隨時更改為log,但是使用scatter方法之前必須預先設置log。

這只是matplotlib中的一個歷史性且不可逆轉的工件,還是屬於“意外行為”類別?

在此輸入圖像描述

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(2,2,1)
plt.scatter(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.title('scatter - scale last')   

plt.subplot(2,2,2)
plt.plot(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.title('plot - scale last')   

plt.subplot(2,2,3)
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)
plt.title('scatter - scale first')   


plt.subplot(2,2,4)
plt.xscale('log')
plt.yscale('log')
plt.plot(X, Y)
plt.title('plot - scale first')   


plt.show()

這與matplotlib計算的顯示區域(軸限制)有某種關系。

通過使用set_xlimset_ylim方法手動編輯軸范圍可以set_xlim set_ylim

plt.figure()
plt.scatter(X, Y)
plt.yscale('log')
plt.xscale('log')
axes = plt.gca()
axes.set_xlim([min(X),max(X)])
axes.set_ylim([min(Y),max(Y)])
plt.show()

圖片

然而,這種行為的確切原因尚不清楚。 歡迎提出建議。

編輯

正如評論部分所述,顯然Matplotlib已經確定Autoscaling在其官方Github回購中具有基本問題作為發布關鍵問題 ,將在即將發布的版本中修復。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM