Matlab使用筆記--顯示動態資料遊標
阿新 • • 發佈:2018-12-11
Matlab使用筆記–顯示動態資料遊標
利用Matlab控制元件text可以實現這個功能。
使用重點注意事項主要有兩項
- 控制元件座標值必須為double
- 控制元件的字串必須為元胞陣列,想要一次建立多個text控制元件需要注意,如果此時還要多行顯示就要使用巢狀的元胞陣列。但是如果是隻建立一個控制元件使用巢狀的元胞陣列將會報錯。
%舉個會報錯的例子
Str{1}={['x=0.1'],['y=0.1']};%1x1 cell
text(0.1,0.1,Str,'Color','r');
%然而這個例子就沒有問題 Str{1}={['x=0.1'],['y=0.1']};%1x1 cell Str{2}={['x=0.2'],['y=0.2']};%1x1 cell text([0.1,0.2],[0.1,0.2],Str,'Color','r');
從上邊我們可以看到需要對建立單個或多個控制元件進行區分。 執行上一段程式碼還可以看出text返回的是控制代碼陣列。也就是說在修改text屬性時需要單獨對陣列中的每一個handle進行修改。
刪除控制元件可以使用delete()函式。
%例子
x = linspace(0,2*pi);%生成0-2pi的100個點
y = sin(x);
plot(x,y)
texthandles = text(pi,0.5,'This is a cell','Color','r');
keyboard;
delete(texthandles)%刪除剛剛的文字
clear texthandles;%在工作區中清除
- 修改text控制元件的Position屬性就可以對text控制元件的位置進行修改。
- 修改text控制元件的String屬性就可以對顯示字元進行修改。
組合以上功能就可以完成動態顯示遊標的需求,演示程式碼如下:
%text使用筆記-顯示動態數目資料遊標 clc clear %首先生成實驗用的曲線 x = linspace(0,2*pi);%生成0-2pi的100個點 y = sin(x); plot(x,y) texthandles = text(pi,0.5,'This is a cell','Color','r'); keyboard; delete(texthandles)%刪除剛剛的文字 clear texthandles;%在工作區中清除 x = linspace(0,2*pi,6);%生成0-2pi的6個點 y = sin(x); for i = 1:length(x) Str{i} = {['x=',num2str(x(i))],['y=',num2str(x(i))]};%Str必須為元胞陣列,若要顯示多行需要使用巢狀的元胞陣列; end texthandles = text(x,y,Str,'Color','r');%x,y必須為double型別 keyboard; delete(texthandles);%刪除剛剛的文字 clear texthandles;%在工作區中清除 %如何動態向資料點新增說明 %以下用兩種方式實現動態顯示文字 detx = linspace(0,2*pi/5,5); texthandles = text(0,0,'','Color','r');%x,y必須為double型別 空的text for i=1:5 %每次顯示i個文字 在原有基礎上新增 Tempx = x(1:i)+detx(i); Tempy = sin(Tempx); if length(texthandles)<i texthandles(length(texthandles)+1:i)= text(zeros(1,i-length(texthandles)),zeros(1,i-length(texthandles)),'','Color','r');%新建text elseif length(texthandles)>i delete(texthandles(i+1:length(texthandles)));%刪除 texthandles(i+1:length(texthandles))=[]; end for j=1:i texthandles(j).String = '';%先清空全部 end for j=1:i%給控制元件賦值 texthandles(j).Position = [Tempx(j),Tempy(j)]; texthandles(j).String = {['x=',num2str(Tempx(j))],['y=',num2str(Tempy(j))]}; end pause(1);%暫停以方便觀察 end keyboard; delete(texthandles); clear texthandles;%在工作區中清除 for i=2:5 %每次顯示i個文字 在原有基礎上新增 Tempx = x(1:i)+detx(i); Tempy = sin(Tempx); if i~=2 delete(texthandles);%刪除舊控制元件 end for j = 1:i TempStr{j} = {['x=',num2str(Tempx(j))],['y=',num2str(Tempy(j))]};%Str必須為元胞陣列,若要顯示多行需要使用巢狀的元胞陣列; end texthandles = text(Tempx,Tempy,TempStr,'Color','r');%此處若只有一個文字但是Str卻使用了巢狀的元胞陣列就會報錯所以不推薦用這種方法 pause(1);%暫停以方便觀察 end
非本人同意原創文章不得轉載