簡體   English   中英

在Matlab中的for循環中為子圖創建注釋框

[英]Creating annotation boxes for subplots in a for-loop in Matlab

我在Matlab中有以下代碼,它們通過for循環運行,從文件中讀取數據並繪制9個不同的圖形,這些圖形對應於數據中的某些特定“通道”,因此我決定在for循環中對它們進行注釋。

 clear
 clc

 for i=1:9
 subplot(3,3,i);
hold on
x = [4 13];  % from your example
y = ([1 1]);    % from your example
y2 = ([-0.4 -0.4]);
H=area(x,y,'LineStyle','none',...
'FaceColor',[1 0.949019610881805 0.866666674613953]);
H1=area(x,y2,'LineStyle','none',...
'FaceColor',[1 0.949019610881805 0.866666674613953]);
% Create textbox
annotation('textbox',...
[0.719849840255583 0.603626943005185 0.176316293929713 0.308290155440411],...
'String',{'FABLIGHT04','Channel',i},...
'FontWeight','bold',...
'FontSize',10,...
'FontName','Geneva',...
'FitBoxToText','off',...
'EdgeColor','none');
axis([0 24 -0.4 1])
set(gca,'XTick',[0:1:24])
set(gca,'YTick',[-0.4:0.2:1])
xlabel('Time (s)');



 end

最初它給了我9個不同的數字,並且注釋功能正常。 但是我希望能夠將它們平鋪到子圖上,以便進行比較。

由於我切換到使用子圖,因此無法正確注釋我的圖形。 打開編輯平台並生成代碼后,我發現matlab首先繪制所有內容,然后將注釋框放在同一圖中,一個放在另一個之上。 查看它生成的代碼,顯然要使用這部分代碼:

 annotation('textbox',...
[0.719849840255583 0.603626943005185 0.176316293929713 0.308290155440411],...
'String',{'FABLIGHT04','Channel',i},...
'FontWeight','bold',...
'FontSize',10,...
'FontName','Geneva',...
'FitBoxToText','off',...
'EdgeColor','none');

並作為:

annotation(figure1,'textbox'...)
etc etc

因此,對於所有9個文本框,它將它們放置在同一圖形上。 我嘗試做S=subplot(3,3,i)然后annotation(S,'textbox') etc etc ,我也嘗試過S(i)=subplot(3,3,i)然后annotation(S,'textbox') etc etc但似乎無濟於事。

我也嘗試過更改盒子的位置。 我似乎也無法弄清楚如何使其變小。

有誰知道如何在for循環的右側子圖中顯示注釋框?

謝謝

恐怕注釋對象是figures屬性,而不是axes屬性,因此很難自定義每個注釋對象的位置,因為無論您擁有多少個子圖,它們都屬於同一圖形,並且您需要指定其位置相對於圖形坐標系。

因此,您可以根據其所屬的子圖在代碼中手動設置每個文本框的位置。

簡單的例子:

clear
clc
close all

figure('Units','normalized'); %// new figure window

for k = 1:2

    str = sprintf('Subplot %d',k);

    subplot(1,2,k)

    plot(rand(1,10));

    %// Customize position here
    hAnnot(k) = annotation('textbox', [k*.4-.2 .6 .1 .1],...
        'String', str,'FontSize',14);

end

看起來像這樣:

在此處輸入圖片說明

它不是很優雅,但是如果您確實需要使用注釋對象,那么我個人不知道還有其他選擇。 一個不太麻煩的選擇是使用簡單的文本對象,這些對象是軸的屬性,因此對位置更友好:)

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM