首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么matplotlib使用log scale在y中选择了错误的范围?

为什么matplotlib使用log scale在y中选择了错误的范围?
EN

Stack Overflow用户
提问于 2016-08-06 10:12:56
回答 2查看 2.6K关注 0票数 0

在使用matplotlib版本1.5.1和python 2.7.11时,我注意到我需要手动指定y中的限制,否则只会绘制最大的y值点。数组的行为也是如此。

如果我移除第一个点,我会得到更多的点,但不是所有的点。

我不记得以前有过像这样手动设置限制的情况-为什么是这里?

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-06 10:25:09

出现问题的原因是,您首先绘制了散点图,然后将比例设置为对数,这会导致放大效果。这就解决了这个问题:

代码语言:javascript
复制
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

这会产生预期的结果。(你问题中的第二个小情节。)

票数 3
EN

Stack Overflow用户

发布于 2016-08-06 10:30:34

似乎matplotlib在转换为对数刻度之前创建了y轴刻度,然后没有根据更改重新创建刻度。第一个子图上的y轴从10e1开始,而不是10e-3。因此,在绘制之前更改比例。

代码语言:javascript
复制
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

我认为如果你在对数标度旁边绘制原始标度,你也许能够找出matplotlib对轴的部分处理的答案。在对数刻度中,没有真正的0 --因为log(0)是未定义的。所以坐标必须从大于0的某个地方开始,这就产生了问题。X轴的范围从0到3,但y轴的范围从0到16。当转换为对数时,matplotlib会正确缩放x轴,但由于y的因子为10,因此未进行缩放。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38799968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档