[心得] 畫多張圖的小技巧已回收

看板MATLAB作者 (mingray/nosql)時間15年前 (2009/04/22 22:58), 編輯推噓3(3030)
留言33則, 3人參與, 最新討論串1/1
matlab如果圖一張一張的plot出來速度會稍慢 但是如果不重開firure的話 速度就會快一些 而且不用看著該死的圖片一張一張跳出來占滿畫面 我的做法是 1. 先用figure開出唯一一張畫布 2. plot想要的資訊 3. print到檔案 4. 用clf清理掉目前的畫布 5. 如果還想再畫 就回到步驟2. 虛擬碼如下 figure(1) plot(t,x) print -dpng 'x.png' clf plot(t,y) print -dpng 'y.png' clf plot(t,z) print -dpng 'z.png' clf -- 我管你的,嘿嘿! /+ \ ┌─╖ mingray / nosql 學校蚊子老鼠好多...... ‵ (OwO ) │成║ ‵ |+|\__ │大║ http://mingray.googlepages.com ( ) | ̄ ̄ ̄ ̄| | └╥╜ 作者為研究生,長期關注保健醫療資訊 ( v | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ v > | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.201.115

04/22 22:59, , 1F
你是畫幾張圖啊?
04/22 22:59, 1F

04/22 23:03, , 2F
36張 有精簡過=3=
04/22 23:03, 2F

04/22 23:03, , 3F
都是該死的飛行參數...
04/22 23:03, 3F

04/22 23:08, , 4F
36張應該還好...你確定是plot在卡速度?
04/22 23:08, 4F

04/22 23:11, , 5F
不知道耶=3= 可是我可以確定figure跑出來的時候都沒辦法操作
04/22 23:11, 5F

04/22 23:11, , 6F
而且理論上會少掉開視窗這個步驟 稍微快應該是合理的@@a
04/22 23:11, 6F

04/22 23:45, , 7F
你試試把所有t x存下來...長度不合就存成cell
04/22 23:45, 7F

04/22 23:47, , 8F
再一口氣plot 36張試試...plot應該花不到3秒吧
04/22 23:47, 8F

04/22 23:48, , 9F
你的方法還要動到硬碟...直覺想不會比較快
04/22 23:48, 9F

04/23 06:24, , 10F
無hold之fig會自清->clf 是無需的指令
04/23 06:24, 10F

04/23 06:28, , 11F
另外沒close,fig wnd應無destroy動作 即無開視窗動作
04/23 06:28, 11F

04/23 06:30, , 12F
簡而言之,影響效能的原因並非繪圖,可試試drawnow驗證
04/23 06:30, 12F

04/23 11:44, , 13F
sunev:你的意思是plot({t,t},{x,y})這樣? 剛剛try一下會err
04/23 11:44, 13F

04/23 11:47, , 14F
BrianCashman:我目前沒有hold但是有subplot
04/23 11:47, 14F

04/23 11:47, , 15F
還是說要先figure?
04/23 11:47, 15F

04/23 11:50, , 16F
剛剛try 用figure不會清畫面@@a
04/23 11:50, 16F

04/23 11:57, , 17F
sunev應該是指先計算所有結果後再一次繪所有的圖
04/23 11:57, 17F

04/23 11:58, , 18F
非指只一個指令繪完所有的圖形,會覺得繪圖很慢應該是
04/23 11:58, 18F

04/23 12:00, , 19F
錯覺,其實所有的時間是花費在計算上,延遲感的原因是
04/23 12:00, 19F

04/23 12:01, , 20F
buffer作怪,你可以在每個繪圖指令後加上drawnow看看
04/23 12:01, 20F

04/23 12:03, , 21F
有沒有subplot並不影響清畫面,若每次分格都一樣
04/23 12:03, 21F

04/23 12:05, , 22F
選定對應的subplot後執行plot即會覆蓋原本之圖形
04/23 12:05, 22F

04/23 12:07, , 23F
除非分隔狀況由多個變單一axes,不然應是沒有影響
04/23 12:07, 23F

04/23 12:58, , 24F
我的圖型是最後一次產生的 所以應該沒有sunev說的問題
04/23 12:58, 24F

04/23 12:59, , 25F
我的圖有3*2,3*1,1*1 所以應該是沒辦法這樣用
04/23 12:59, 25F

04/23 13:31, , 26F
剛剛小試一下 以我的case print前drawnow沒有明顯差異
04/23 13:31, 26F

04/23 13:32, , 27F
而我的print是一定要print的(要和舊資料比較)
04/23 13:32, 27F

04/23 13:35, , 28F
"sunev:你的方法還要動到硬碟" 合理的作法一股作氣
04/23 13:35, 28F

04/23 13:35, , 29F
繪完後在進行io的動作
04/23 13:35, 29F

04/23 13:36, , 30F
另外,可以試試subplot(3,2,1~6)後再subplot(1,1,1)
04/23 13:36, 30F

04/23 14:08, , 31F
subplot用過的圖如果不清掉 有些label就要手動清理有點麻煩
04/23 14:08, 31F

04/23 14:09, , 32F
而且當圖片冒出來時user也沒辦法進行操作 我還是保持這樣好
04/23 14:09, 32F

04/23 14:10, , 33F
一次io可能比較快吧 只是在io期間都沒辦法做事好無趣
04/23 14:10, 33F
文章代碼(AID): #19xp2AZ5 (MATLAB)