2015-01-19 2 views
0

У меня есть следующий код в Matlab, который проходит через цикл for, считывает данные из файла и отображает 9 разных цифр, которые соответствуют некоторым определенным «каналам» в моем данных, поэтому я решил аннотировать их в цикле for.Создание блоков аннотаций для подзадач в петле в Matlab

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?

Благодаря

+0

можете ли вы разместить небольшой набор данных, который мы можем использовать для воспроизведения ошибки? Благодаря! –

+0

Привет, Я изменил код сейчас, так что вам не нужен файл, который я использовал. Поэтому вы должны иметь возможность воспроизвести ошибку сейчас. Спасибо –

ответ

1

Я боюсь, объекты аннотаций являются собственностью 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 

который выглядит следующим образом:

enter image description here

Его не очень элегантный, но я лично не знаю ни одного другого варианта, если вам нужно использовать объекты аннотаций. Менее громоздкой альтернативой было бы использование простых объектов text, которые являются свойствами осей и, следовательно, гораздо более дружественными к положению :)

Надеюсь, что это поможет!

+0

Да, оглядываясь на что-то на этом, я понял, что это может быть так. Большое спасибо за ваше решение, оно отлично работает! –

+0

Удивительный, тогда рад, что это сработало! –

Смежные вопросы