2015-03-31 77 views
1

我正在MATLAB中構建一個數據分析平臺。系統的其中一項功能需要創建許多圖。在任何時候,只有一個繪圖可用,並且用戶可以根據請求遍歷到下一個/上一個(這裏強調的是不需要打開多個窗口)。爲何subplot比figure更快?

最初我在每次顯示新圖時都使用了figure命令,但是我注意到,當用戶遍歷下一個圖時,這個命令比我想要的要長一點。降低可用性。所以我試着用subplot來代替它,它運行得更快。

看到這種行爲我跑了一個小實驗,計時兩個。第一次figure運行需要約0.3秒,subplot需要0.1秒。 figure的平均運行時間爲0.06秒,標準偏差爲0.05,而subplot僅爲0.002,標準差爲0.001。看起來subplot快了一個數量級。

問題是:在任何時候只有一個窗口可用的情況下,是否有任何理由使用數字?

一般情況下使用`subplot'會有什麼價值嗎?

(即使只有一次也可以進行類似的考慮)。

回答

3

subplot的呼叫除了創建一個新的axes對象外,還有一些方便的定位選項。

軸對象總是孩子的身影對象,所以如果沒有figure窗口打開,subplot將打開一個。這個動作需要一點時間。因此,不是每個新圖都打開一個新的數字窗口,而是使用subplot創建一個新的軸對象的速度更快,正如您確定的那樣。爲了節省一些內存,你可以通過clf清除之前的圖爲suggested by Daniel

據我所知,你不想在平鋪位置創建軸,而你只是想創建一個軸對象。所以直接使用axes命令會更快。 subplot實際上是矯枉過正。

如果所有圖表都具有相同的軸限制和標籤,則不需要使用clf。使用cla(清除軸)刪除上一個圖,但保留標籤,限制和網格。

實施例:

%// plot #1 
plot(x1, y2); 
xlim([0,100]); ylim([0,100]); 
xlabel('x'); 
ylabel('y'); 

%// clear plot #1, keep all settings of axes 

%// plot #2 
plot(x2, y2); 

... 
0

使用figure一旦創建一個圖和clf在重新繪製之前清除它的內容。