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