2017-05-24 86 views
0

我需要生成並保存數以千計的散點圖,其本質只是改變了只有一點相同的許多人物最有效的方法是「Y」變量。什麼是最快的方法來做到這一點?產生與matplotlib

我想到了創建圖和軸實例,只是情節之間然後清除這樣的:

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,所以我假設在寫入磁盤時不限制速度太多。

回答

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])) 
+0

找到我喜歡這個選項,但希望類似下面的答案的東西。然而,這可能與該方法 – pbreach

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

+0

這種做法將是完美的結合。我將不得不測試它 – pbreach