Python 为什么matplotlib使用对数比例选择了错误的y范围?

Python 为什么matplotlib使用对数比例选择了错误的y范围?,python,python-2.7,matplotlib,Python,Python 2.7,Matplotlib,使用matplotlib版本1.5.1和python 2.7.11,我注意到我需要手动指定y中的限制,否则只绘制最大y值点。数组的行为方式相同 如果我去掉第一点,我会得到更多的点,但不是全部 我不记得以前有过像这样的手动设置限制-为什么在这里 出现此问题的原因是,您首先绘制了散点图,然后将比例设置为对数,从而产生放大效果。这就消除了问题: plt.xscale('log') plt.yscale('log') plt.scatter(X, Y) 这会产生预期的结果。(问题中的第二个子图。)出

使用matplotlib版本1.5.1和python 2.7.11,我注意到我需要手动指定y中的限制,否则只绘制最大y值点。数组的行为方式相同

如果我去掉第一点,我会得到更多的点,但不是全部

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


出现此问题的原因是,您首先绘制了散点图,然后将比例设置为对数,从而产生放大效果。这就消除了问题:

plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

这会产生预期的结果。(问题中的第二个子图。)

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

plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

这会产生预期的结果。(问题中的第二个子图。)

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

plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

我认为,如果您在对数刻度旁边绘制原始刻度,您可能能够通过
matplotlib
找到轴部分处理的答案。在对数刻度中,不存在真正的0——因为对数(0)未定义。所以坐标必须从0以上的某个位置开始,这会导致问题。x轴的范围为0到3,y轴的范围为0到16。转换为对数时,
matplotlib
正确缩放x轴,但由于y的系数为10,因此它忽略了缩放。

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

plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)

我认为,如果您在对数刻度旁边绘制原始刻度,您可能能够通过
matplotlib
找到轴部分处理的答案。在对数刻度中,不存在真正的0——因为对数(0)未定义。所以坐标必须从0以上的某个位置开始,这会导致问题。x轴的范围为0到3,y轴的范围为0到16。转换为log时,
matplotlib
正确地缩放x轴,但由于y的因子为10,因此它忽略了缩放。

好的,这是一个解决方案,但这就是它的工作方式吗?它只影响y刻度,x刻度不需要这个。我想我一定是一直在按“正确”的顺序做,而没有意识到这一点。谢谢好吧,这是一个解决办法,但这就是它应该工作的方式吗?它只影响y刻度,x刻度不需要这个。我想我一定是一直在按“正确”的顺序做,而没有意识到这一点。谢谢y、 但不是x?我经常使用log,有时使用x轴或y轴,或者同时使用两个轴。我以前从未见过这种情况。嗯。。。就像我在另一个答案中所说的,可能我一直都是按照这个顺序做的,但实际上我没有意识到这是一个“正确”的顺序。谢谢!回顾我的一些绘图示例,我发现90%的时间我使用
plt.plot()
,其中“错误”的顺序可以正常工作。对于
plt.scatter()
,它似乎是“错误的”。由于范围有限,我的许多使用对数刻度的散点图似乎是“偶然”起作用的——就像一个随机的例子。也许这以前偶尔会发生,我只是摆弄它,让它工作起来,然后继续。我把你有用的答案链接到了。y,但不是x?我经常使用log,有时使用x轴或y轴,或者同时使用两个轴。我以前从未见过这种情况。嗯。。。就像我在另一个答案中所说的,可能我一直都是按照这个顺序做的,但实际上我没有意识到这是一个“正确”的顺序。谢谢!回顾我的一些绘图示例,我发现90%的时间我使用
plt.plot()
,其中“错误”的顺序可以正常工作。对于
plt.scatter()
,它似乎是“错误的”。由于范围有限,我的许多使用对数刻度的散点图似乎是“偶然”起作用的——就像一个随机的例子。也许这以前偶尔会发生,我只是摆弄它,让它工作起来,然后继续。我已经把你有用的答案链接到了。