使用matplotlib生成许多数字的最有效方法

时间:2017-05-24 17:51:36

标签: python performance matplotlib

我需要生成并保存数以千计的散点图,这些散点图本质上是相同的,除了唯一改变的是" y"变量。最快的方法是什么?

我考虑过创建图和轴实例,然后简单地在这样的图之间清除:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random((100, 1000))
x = list(range(100))

fig = plt.figure()
ax = fig.add_subplot(111)

for i in range(data.shape[1]):
    ax.scatter(x, data[:,i])
    fig.savefig("%d.png" % i, dpi=100)
    ax.cla()

这仍然需要相当长的时间,因此这是一种更好/更快的方法吗?此示例中的每个图像大约为15kb,所以我假设写入磁盘并不会限制速度太多。

2 个答案:

答案 0 :(得分:3)

一种选择是使用多个流程。

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

data = np.random.random((100, 1000))
x = list(range(100))

fig = plt.figure()
ax = fig.add_subplot(111)

def save_plot(i):
    ax.scatter(x, data[:,i])
    fig.savefig("%d.png" % i, dpi=100)
    ax.cla()

p = multiprocessing.Pool(4)
p.map(save_plot, range(data.shape[1]))

答案 1 :(得分:2)

尝试在没有GUI的情况下创建数字。在创建和保存许多数字时,我发现速度要快得多。

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.plot(range(5))
canvas = FigureCanvas(fig)
canvas.print_figure('sample.png')

可以在http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html

找到类似的内容