Подтвердить что ты не робот

Подключение подзаголовков с линиями в matlab

Рассмотрим следующий пример кода:

load sumsin; 
s = sumsin+10; % example data series
time = linspace(0,5*24,1000);

figure(1);
subplot(311);
plot(time,s,'k');

subplot(312);
plot(time,s,'k');
hold on;
[s_denoised,~, ~] = wden(s,'minimaxi','s','sln',1,'db4');
plot(time,s_denoised,'r');

subplot(313);
plot(time,s,'k');
hold on;
plot(time,s_denoised,'r');
xlim([20 40]);

В результате enter image description here

Я хотел бы изменить этот график, вставив строки между подзаголовками 2 и 3, чтобы показать, что подзаголовок 3 является частью подзаголовка2. Например:

enter image description here

Как это можно достичь в Matlab?

Изменить:

Я подумывал о чем-то вроде создания невидимых осей по всей фигуре, получая положение каждого подзаголовка, расположение 20 и 40 будет определенным процентом от ширины подзаголовка, поэтому я мог бы использовать команду аннотации отсюда, чтобы начать линию, а затем применить тот же метод к третьему подзаголовку, чтобы соединить строки с нужным местоположением. Я пробовал это, но до сих пор нет решения.

4b9b3361

Ответ 1

Только ради ответа вы можете использовать annotation objects, чтобы получить тот эффект, который вы ищете, как правильно предложено в комментарии. Обратите внимание, что их координаты должны быть нормализованы в диапазоне [0, 1] относительно окна фигуры, поэтому было бы довольно утомительно их корректировать.

Это делает работу, но это ужасно. Не делайте этого таким образом.

Пример

Поскольку у меня нет ваших исходных данных, я нарисую что-то свое (но похожее на ваше):

t = linspace(0, 120, 1000);
s_denoised = sin(t / 2);
s = s_denoised + 0.2 * randn(size(s_denoised));
subplot(3, 1, 1), plot(t, s, 'k')    
subplot(3, 1, 2), plot(t, s, 'k', t, s_denoised, 'r')    
subplot(3, 1, 3), plot(t, s, 'k', t, s_denoised, 'r'), xlim([20 40])

Теперь добавьте строки "аннотации", которые вы хотите:

annotation('doublearrow', [.26 .39], [.38 .38]); %// Top double-arrow line
annotation('doublearrow', [.13 .9], [.34 .34]);  %// Bottom double-arrow line
annotation('line', [.325 .325], [.38 .37]);      %// Top little connector
annotation('line', [.515 .515], [.35 .34]);      %// Bottom little connector
annotation('line', [.325 .515], [.37 .35]);      %// Line

Результат:

result image

Ответ 2

Немного поздно в игре, но все же полезно знать об этих дополнительных инструментах, доступных в обмене файлами (FEX):

inset2DAbsolute - создает вставку осей, определяемую с использованием больших осей и соответствующих аннотаций.

enter image description here

Встроенная лупа - инструмент масштабирования для 2D-графики изображений на одном и том же участке. Он состоит из двух блоков (вторичных осей и лупы). Вторичные оси, которые могут быть произвольно распределены в пределах фигуры, отображают область, отмеченную лупой.

enter image description here

Ответ 3

Интересный вопрос.

Однако, по моему опыту, украшение графиков и графиков можно сделать более эффективно с помощью графического программного обеспечения.
Для этой цели я обычно использую excel + powerpoint.

Поэтому мой совет (который не совсем хороший ответ для вашего вопроса):

  • экспортируйте свои данные в excel, используя xlswrite

  • используйте excel для создания желаемых графиков.

  • скопировать-вставить графики в точку питания для "ручной обработки"...