數據采集或者數據回放時,用matlab的plot畫圖的話一般都是靜態的,一下畫完了就不動了。但是有些時候,比如實時的數據采集然後通過串口或pci在matlab中畫出數據的變化圖並同步動態顯示,以及在一些想用matlab繪圖回放大塊的數據模擬隨時間變化的情景。這時候就需要用到坐標圖的動畫顯示了。這個功能實現起來有多種方法,只介紹一種最簡單也是matlab中推薦使用的。
此功能的實現依賴animatedline對象,配合drawnow函數使用,具體使用可看幫助,以下也簡單介紹下,都是搬運的幫助文檔。
1:基本實現
h = animateline;<br>axis([0,4*pi,-1,1])<br>x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
addpoints(h,x(k),y(k));
drawnow
end
如果有另一個函數想從當前圖形中獲得數據,用animateline的getpoints方法
[xdata,ydata] = getpoints(h);
2:如果想實現貪吃蛇那樣的效果,動態的圖像中只顯示一部分,而不是每次都從頭就開始顯示,可以設置畫圖的最大點數,通過設置MaximumNumPoints這個屬性的值來實現
h = animatedline('MaximumNumPoints',100);
axis([0,4*pi,-1,1])
x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
addpoints(h,x(k),y(k));
drawnow
end
3:加快刷新的技巧,以上每次循環中都只向結構體中增加一個點,實時顯示的話有可能刷新速度跟不上,所以可以考慮一次循環中向裡面添加多個點,這樣就可以加快刷新了
h = animatedline;
axis([0,4*pi,-1,1])
numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:100:numpoints-100
xvec = x(k:k+99);
yvec = y(k:k+99);
addpoints(h,xvec,yvec)
drawnow
end
4:也可以用drawnow update加快動畫速度
h = animatedline;
axis([0,4*pi,-1,1])
numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:numpoints
addpoints(h,x(k),y(k))
drawnow update
end
5:控制動畫的速度,有時候,希望動畫顯示的慢一點,上面介紹的都是加快動畫的,如果要想控制動畫速度,可以配合tic函數與toc函數,相當於一個記錄程序運行的秒表,調用tic表示按一下開始計時,調用toc表示按一下結束及時,兩個之間的時間差就是這一段程序運行的時間,下面這段代碼表示控制幀速度在30
h = animatedline;
axis([0,4*pi,-1,1])
numpoints = 10000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
a = tic; % start timer
for k = 1:numpoints
addpoints(h,x(k),y(k))
b = toc(a); % check timer
if b > (1/30)
drawnow % update screen every 1/30 seconds
a = tic; % reset timer after updating
end
end
drawnow % draw final frame
其它的還有一些細節的屬性,比如設置線條屬性等,具體可看看幫助文檔
Ubuntu Server上安裝Matlab http://www.linuxidc.com/Linux/2014-09/106242.htm
Matlab與C/C++聯合編程之從Matlab調用C/C++代碼 http://www.linuxidc.com/Linux/2012-08/68148.htm
二分類SVM方法Matlab實現 http://www.linuxidc.com/Linux/2013-05/84050.htm
Matlab中的取整函數fix, floor, ceil與round http://www.linuxidc.com/Linux/2013-10/91161.htm
Matlab編譯cuda的.cu文件 http://www.linuxidc.com/Linux/2014-04/100675.htm
Linux Matlab服務器進一步改造成Application Server(應用程序服務器) http://www.linuxidc.com/Linux/2014-09/106340.htm