在使用matplotlib版本1.5.1和python2.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()
问题出现是因为您首先绘制了散点图,然后将比例设置为对数,这会导致放大效果。这样可以消除问题:
这就产生了预期的结果。(你问题中的第二个小插曲。)
似乎
matplotlib
在转换为对数刻度之前创建y轴刻度,然后不根据更改重新创建刻度。第一个子批次的y轴从10e1开始,而不是10e-3。所以在你绘图之前改变比例。在我想如果你在对数刻度旁边画出原始刻度,你也许可以通过
matplotlib
来找出轴部分处理的答案。在日志刻度中,不存在真正的0,因为log(0)未定义。所以坐标必须从0开始,这就导致了问题。x轴的范围是0到3,而y轴的范围是0到16。当转换为log时,matplotlib
正确地缩放x轴,但由于y的因子为10,因此它错过了缩放。在相关问题 更多 >
编程相关推荐