【问题标题】:How can I make matplotlib plot rendering faster如何使 matplotlib 绘图渲染更快
【发布时间】:2017-07-28 04:04:34
【问题描述】:

我想使用FigureCanvasQTAgg 中的散点图。散点图可能有 50,000 个或更多数据点。用户想要在图中绘制一个多边形以选择多边形内的数据点。我已经意识到,通过鼠标点击设置点并使用Axis.plot() 将它们与线连接起来。当用户设置了所有点时,多边形被绘制。每次我添加一个新点时,我都会调用FigureCanvasQTAgg.draw() 来渲染当前版本的绘图。这很慢,因为散点图有很多数据。 有没有办法让它更快?

【问题讨论】:

  • 您应该先抽取数据点,然后再将它们绘制到散点图中。如果抽取是不可能的,那么您应该只显示用户想要绘制多边形的区域。这应该会加快您的渲染速度。
  • matplotlib "slow" 有 409 个问题,matplotlib "faster" 有 354 个问题。他们都没有帮助吗?在这种情况下,请更具体地告诉我们您尝试了什么以及为什么没有帮助。
  • 为什么需要这么多数据点?这段代码的最终目标是什么?
  • @MohammadAthar 的目标是删除某些点并将提醒写入文件。目视检查最容易做到这一点。
  • 不提供必要的代码并且不缩小问题的范围只会降低获得满意答案的机会。最后,这是你的选择。就个人而言,我觉得编写一个完整的最小示例并自己进行研究是非常不令人满意的,因此在解决方案上花费的时间比提问者更多。

标签: python matplotlib plot pyqt4


【解决方案1】:

两种可能的解决方案:

  1. 不显示散点图,而是显示 hexbin 图。
  2. 使用 blitting。

(如果有人想知道这个答案的质量;请注意提问者在问题下方的 cmets 中特别要求这种结构。)

【讨论】:

  • 有趣的想法,但我确实有不止一种颜色。那怎么样:(我把它放在一个单独的答案中)
【解决方案2】:

我可以尝试使用matplotlib将散点图转换成图像来渲染它并用imshow显示图像:

import matplotlib
matplotlib.use('QT4AGG')
import matplotlib.pyplot as plt
import Image # PIL
from io import BytesIO
from matplotlib import image

plt.scatter(xdata, ydata)
plt.axis('off')
plt.subplots_adjust(0, 0, 1, 1, 0, 0)
stream = BytesIO()
plt.savefig(stream, format='raw')
pilImage = Image.fromstring('RGBA',size=(640, 480), data = stream.getvalue())
plt.imshow(image.pil_to_array(pilImage))

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2021-11-29
    • 2019-09-13
    相关资源
    最近更新 更多