Подключение подзаголовков с линиями в 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 будет определенным процентом от ширины подзаголовка, поэтому я мог бы использовать команду аннотации отсюда, чтобы начать линию, а затем применить тот же метод к третьему подзаголовку, чтобы соединить строки с нужным местоположением. Я пробовал это, но до сих пор нет решения.
Ответы
Ответ 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 для создания желаемых графиков.
-
скопировать-вставить графики в точку питания для "ручной обработки"...