1. 程式人生 > >Matlab使用筆記--顯示動態資料遊標

Matlab使用筆記--顯示動態資料遊標

Matlab使用筆記–顯示動態資料遊標

利用Matlab控制元件text可以實現這個功能。

使用重點注意事項主要有兩項

  1. 控制元件座標值必須為double
  2. 控制元件的字串必須為元胞陣列,想要一次建立多個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

非本人同意原創文章不得轉載