python - 在 matplotlib 中,为什么用细线绘图会更快?

标签 python macos numpy matplotlib scipy

我今天偶然发现了这个:如果线宽小于 1.0,那么在 matplotlib 中绘制线条似乎要快得多。我只在 Mac 上测试过,但效果似乎非常强。

例如,如果您尝试此代码,您会发现线宽为 0.5 的数据绘制速度比 1.0 的线宽快 10 倍。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,20000)
y = np.sin(x) + np.random.random(len(x))*0.1

plt.ion()
plt.show()

plt.plot(x,y,lw=0.5)
plt.draw()

plt.figure()

plt.plot(x,y,lw=1.0)
plt.draw()

我用这段代码绘制了线宽和速度之间的关系图:

import numpy as np
import matplotlib.pyplot as plt
import time

x = np.linspace(0,10,10000)
y = np.sin(x) + np.random.random(len(x))*0.1

plt.ion()
plt.show()

linewidths = np.linspace(2,0,20)
times = []

for lw in linewidths:
    t = time.time()

    plt.plot(x,y,lw=lw)
    plt.draw()

    times.append(time.time()-t)

    plt.figure()



plt.ioff()
plt.plot(linewidths[1:],times[1:],'ro')

plt.xlabel('Linewidth (points)')
plt.ylabel('Time (seconds)')
plt.show()

结果如下:enter image description here

使用小于 1.0 的线宽可提供约 10 倍的加速,在 1.0 之后,时间线性增加。如果数据点的数量很大,大于大约 5000 个点左右,我只会观察到这种效果。这对我来说很有意义,如果我要求 matplotlib 显示更多像素,那么绘制绘图可能需要更长的时间,但我没想到使用稍小的线宽(0.5 对 1.0)会带来巨大的加速。

谁能解释为什么会这样?我很高兴发现它,因为它可以更快地显示大型数据集。


一些人认为这可能特定于 MacOSX 后端。这似乎很有可能。如果我尝试以 png 格式保存绘图而不是将它们绘制到屏幕上,时间似乎更随机分布: enter image description here

最佳答案

有人可能会用更彻底的答案替换它,但似乎这种效果是 MacOSX 后端独有的,因为将图形保存为 png 时不会出现这种效果。绘图时间似乎也受 Matplotlib 版本的影响(1.3.x 与 1.3.0)。但是,Mac 用户似乎可以通过将线宽减小到小于 1.0 的值来享受大型数据集的加速。

关于python - 在 matplotlib 中,为什么用细线绘图会更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905273/

相关文章:

iPhone 到 Mac 开发

android - Droid x 无法同时调试和连接到 sdcard (os x)

macos - 如何在 mac OSX 上编译 node-segfault-handler?

python - 如何有效地扩展 numpy 中的分解张量?

python - 如何创建一个 numpy 数组,其元素是其他 numpy 数组对象?

python - 循环列表中的数据并将它们分配到数据帧的新列中,采用循环方法,直到数据帧的长度

python - update_or_create 的 Django GenericRelation

python - 提高代码效率: standard deviation on sliding windows

python - Django 序列化器输出作为 JSON 对象的一部分

python - 使用正则表达式将字符串拆分为多个空格。