2015-11-24 57 views
1

我需要用Matplotlib繪製大量的矩形對象。 這裏有一個簡單的代碼,帶有n個隨機生成的矩形。如何使用Matplotlib加速大量矩形的繪圖?

import matplotlib 
import matplotlib.pyplot as plt 
import random 

fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 
plt.xlim([0, 1001]) 
plt.ylim([0, 1001]) 
n=10000 
for i in range(0,n): 
    x = random.uniform(1, 1000) 
    y = random.uniform(1, 1000) 
    ax.add_patch(matplotlib.patches.Rectangle((x, y),1,1,)) 
plt.show() 

n = 10000需要幾秒鐘,但如果我們將矩形數增加到100K,則需要太多時間。 任何改善它的建議,或不同的方法在合理的時間內有陰謀?

+1

我知道你正在要求matplotlib,但在你的情況下,gnuplot可能會表現更好。我知道,與gnuplot相比,matplotlib非常慢; http://stackoverflow.com/questions/911655/gnuplot-vs-matplotlib – Moritz

+0

謝謝你的建議,我要去嘗試gnuplot。 –

回答

2

添加所有補丁的情節與PatchCollection一次圍繞一個2-3倍的加速產生,其中n = 10,000,我不知道這將如何擴展到更大的數字,但:

from matplotlib.collections import PatchCollection 
import matplotlib 
import matplotlib.pyplot as plt 
import random 

fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 
plt.xlim([0, 1001]) 
plt.ylim([0, 1001]) 
n=10000 
patches = [] 
for i in range(0,n): 
    x = random.uniform(1, 1000) 
    y = random.uniform(1, 1000) 
    patches.append(matplotlib.patches.Rectangle((x, y),1,1,)) 
ax.add_collection(PatchCollection(patches)) 
plt.show() 
+0

非常感謝。我確認你的方法產生了3倍的加速。 100K物體需要約40秒到約2分30秒。 –