[英]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_xlim
和set_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.