【发布时间】:2013-04-03 18:57:07
【问题描述】:
我在使用 matplotlib 和 Python 时遇到了一个相当严重的问题。我有一个密集的周期图数据集并想要绘制它。问题是,当数据点多于可以在像素上绘制的数据时,程序包不会选择要显示的最小值和最大值。这意味着随便看一下情节可能会导致您得出错误的结论。
以下是此类问题的示例:
数据集绘制时覆盖了plot() 和scatter()。您可以看到,在密集的数据字段中,连接数据的蓝线未达到实际峰值,导致人类观察者得出结论,约 2.4 处的峰值是最大值,而实际上并非如此。
如果您放大或强制宽查看窗口,它会正确显示。 rasterize 和 aa 关键字对问题没有影响。
有没有办法确保始终呈现plot() 调用的最小/最大点?否则,这需要在 matplotlib 的更新中解决。我从未有过这样的绘图包,这是一个相当大的问题。
编辑:
x = numpy.linspace(0,1,2000000)
y = numpy.random.random(x.shape)
y[1000000]=2
plot(x,y)
show()
应该复制问题。虽然它可能取决于您的显示器分辨率。通过拖动并调整窗口大小,您应该会看到问题所在。一个数据点应该突出 y=2,但这并不总是显示出来。
【问题讨论】:
-
您使用的是什么版本的 MPL?如果它是最新的,您应该在 github 跟踪器上创建一个问题(这将确保得到核心开发人员的关注)。您能否发布一个示例数据集 + 用于生成该图的代码?它使测试变得更加容易。
-
如果你使用
plot(..., marker='.', linestyle='-'),它会正确达到最小值/最大值吗? -
@tcaswell 添加了代码。标记和线条样式的更改没有帮助。谢谢。
-
我无法复制它...你的后端是什么?
matplotlib.get_backend() -
如果我完全按照发布的方式运行代码,我会从渲染器中得到
OverflowErrors。通过将所有数字减少 10,我可以让它运行,但总能看到峰值。matplotlib.__version__给了什么?
标签: python matplotlib