12

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

例如,如果您尝试此代码,您将看到数据的绘制速度快了 10 倍,线宽为 0.5,而不是线宽为 1.0。

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()

结果如下:在此处输入图像描述

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

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


有人建议这可能特定于 MacOSX 后端。这似乎很可能。如果我尝试以 png 格式保存图而不是将它们绘制到屏幕上,则时间似乎更随机分布: 在此处输入图像描述

4

1 回答 1

1

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

于 2013-09-20T19:59:05.987 回答