資源描述:
《matlab中使用plot函數(shù)動態(tài)畫圖方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Matlab中使用Plot函數(shù)動態(tài)畫圖方法總結(jié)本文來自:MATLAB愛好者論壇(MATLABFAN)作者:admin日期:2009-8-1711:23閱讀:550人打印收藏大中小Plot,Matlab,函數(shù),動態(tài),畫圖Matlab除了強大的矩陣運算,仿真分析外,繪圖功能也是相當(dāng)?shù)膹姶?,靜態(tài)畫圖沒什么問題,由于Matlab本身的多線程編程缺陷,想要動態(tài)的畫圖,并且能夠很好的在GUI中得到控制,還不是一件很容易的事情,下面總結(jié)幾種方法。一.AXIS移動坐標系??這種方法是最簡單的一種方法,適合于數(shù)據(jù)已經(jīng)全部生成的場合,先畫圖,然后移動坐標
2、軸。實例代碼如下:1.%%2.%先畫好,然后更改坐標系3.%在命令行中使用Ctrl+C結(jié)束4.t=0:0.1:100*pi;5.m=sin(t);6.plot(t,m);7.x=-2*pi;8.axis([x,x+4*pi,-2,2]);9.gridon10.while111.ifx>max(t)12.break;13.end14.x=x+0.1;15.axis([x,x+4*pi,-2,2]);%移動坐標系16.pause(0.1);17.end復(fù)制代碼二.HoldOn模式????????此種方法比較原始,適合于即時數(shù)據(jù),原理是先畫
3、上一幀,接著保留原始圖像,追加下一幀圖像,此種方式比較繁瑣,涉及畫圖細節(jié),并且沒有完整并連續(xù)的Line對象數(shù)據(jù)。??例如:1.%%2.%HoldOn法3.%此種方法只能點,或者分段劃線4.holdoff5.t=0;6.m=0;7.t1=[00.1];%要構(gòu)成序列8.m1=[sin(t1);cos(t1)];9.p=plot(t,m,'*',t1,m1(1,:),'-r',t1,m1(2,:),'-b','MarkerSize',5);??10.x=-1.5*pi;11.axis([xx+2*pi-1.51.5]);12.gridon;
4、13.14.fori=1:10015.??holdon16.??t=0.1*i;%下一個點17.??m=t-floor(t);18.??t1=t1+0.1;%下一段線(組)19.??m1=[sin(t1);cos(t1)];20.??p=plot(t,m,'*',t1,m1(1,:),'-r',t1,m1(2,:),'-b','MarkerSize',5);??21.??x=x+0.1;22.??axis([xx+2*pi-1.51.5]);23.??pause(0.01);24.end復(fù)制代碼三.Plot背景擦除模式????這種模式
5、比較適合畫動畫,效率比較高,刷新閃爍小,適合即時數(shù)據(jù),最終的Line結(jié)構(gòu)數(shù)據(jù)完整。????了解此方法之前要搞清楚Plot函數(shù)的原型是什么:Plot函數(shù),輸入為X-Y(-X)坐標元組、以及“屬性”-“值對,輸出為一個列向量(每條曲線歲對應(yīng)的Line結(jié)構(gòu)Handle,每一行代表一個線條的handles),每一線條都有XData,YData向量。如果你畫了2條線,那么會返回2×1的向量。重新畫圖不需要重新書寫Plot,只需要刷新圖像即可,使用drawnow函數(shù)。完整實例如下:1.畫一個點的動畫:1.%%2.%采用背景擦除的方法,動態(tài)的劃點,
6、并且動態(tài)改變坐標系3.%t,m均為一行,并且不能為多行4.t=0;5.m=0;6.p=plot(t,m,'*',...7.??'EraseMode','background','MarkerSize',5);8.x=-1.5*pi;9.axis([xx+2*pi-1.51.5]);10.gridon;11.12.fori=1:100013.??t=0.1*i;????%兩個變量均不追加14.??m=sin(0.1*i);15.??set(p,'XData',t,'YData',m)16.??x=x+0.1;??17.??drawnow
7、18.??axis([xx+2*pi-1.51.5]);1.??pause(0.1);2.end復(fù)制代碼2.動態(tài)多條曲線(即時數(shù)據(jù))1.%%2.%采用背景擦除的方法,動態(tài)的劃線,并且動態(tài)改變坐標系3.%多行劃線4.5.t=[0]6.m=[sin(t);cos(t)]7.p=plot(t,m,...8.??'EraseMode','background','MarkerSize',5);9.x=-1.5*pi;10.axis([xx+2*pi-1.51.5]);11.gridon;12.13.14.fori=1:100015.??t=[
8、t0.1*i];????????????%Matrix1*(i+1)16.??m=[m[sin(0.1*i);cos(0.1*i)]];%Matrix2*(i+1)17.??set(p(1),'XData',t,'YDa