Использование subplot для графиков в Matlab

Что такое subplot в matlab

Что такое subplot в matlab

Функция subplot в Matlab позволяет размещать несколько графиков в одной фигуре, разделяя окно на сетку из строк и колонок. Каждое окно управляется индексом, что дает возможность одновременно визуализировать различные наборы данных без создания отдельных окон. Например, subplot(2,3,4) создаёт фигуру из 2 строк и 3 колонок и активирует четвёртую ячейку для построения графика.

Для корректного отображения рекомендуется заранее планировать размеры сетки под количество графиков. При превышении числа индексов Matlab автоматически расширяет фигуру, но это может исказить пропорции и усложнить анализ данных. Практика показывает, что оптимальная сетка для 4–6 графиков – 2×2 или 2×3.

Важно использовать axis, title и legend отдельно для каждого subplot, чтобы обеспечить читаемость. Например, subplot(2,2,1); plot(x1,y1); title(‘График 1’) создаёт индивидуальный заголовок для первой панели. Такой подход упрощает сравнение данных между графиками без потери информации.

Для сложных визуализаций полезно комбинировать subplot с linkaxes, синхронизируя масштабы осей. Это особенно актуально при анализе временных рядов или многомерных данных, где важно одинаковое отображение трендов и пиков в разных панелях.

Создание сетки графиков с помощью subplot

Создание сетки графиков с помощью subplot

Функция subplot позволяет организовать несколько графиков в единой фигуре, задавая сетку строк и столбцов. Синтаксис subplot(m, n, p) создаёт сетку из m строк и n столбцов и активирует p-й элемент для построения графика.

Для равномерного распределения графиков рекомендуется заранее определять размеры сетки исходя из количества визуализаций. Например, для шести графиков оптимальна сетка 2×3, чтобы сохранить читаемость осей и подписей.

Каждое поле сетки можно заполнять отдельным графиком: после вызова subplot следует стандартная команда построения графика, например plot(x, y) или bar(data). Для более сложных комбинаций полезно применять hold on внутри выбранной ячейки.

Для сохранения пропорций графиков рекомендуется использовать axis tight или axis equal, чтобы линии и маркеры не деформировались при изменении размеров окна фигуры. Для управления отступами между графиками применяется tight_layout через функцию sgtitle и корректировку Position.

Присвоение заголовков, подписей осей и легенд каждой ячейке сетки позволяет избежать наложений информации. Рекомендуется использовать title('Название'), xlabel и ylabel после каждой команды subplot.

Для динамического построения сеток с большим количеством графиков удобно использовать циклы. Индекс p в subplot(m, n, p) можно вычислять как p = i + (j-1)*n, где i – номер столбца, j – номер строки. Это позволяет автоматически заполнять сетку данными из массивов без ручного указания каждой ячейки.

При комбинировании разных типов графиков в одной фигуре важно согласовать масштабы осей и цвета линий, чтобы визуальные различия были очевидны. Для сложных композиций удобен метод объединения subplot с linkaxes, который синхронизирует оси нескольких графиков.

Размещение нескольких графиков в одной фигуре

Размещение нескольких графиков в одной фигуре

В MATLAB для отображения нескольких графиков в одной фигуре используется функция subplot, которая делит окно на сетку из строк и столбцов. Синтаксис: subplot(m, n, p), где m – количество строк, n – количество столбцов, p – номер текущей ячейки. Например, subplot(2, 2, 3) создаст сетку 2×2 и активирует третью ячейку для построения графика.

Для корректного отображения графиков рекомендуется заранее определить размер сетки с учетом объема данных. Если графиков больше 6, целесообразно использовать отдельные фигуры для улучшения читаемости.

Каждый subplot можно настраивать независимо: задавать оси с помощью xlim и ylim, добавлять подписи xlabel, ylabel и заголовки title. Это позволяет визуально сопоставлять различные наборы данных без наложения графиков.

Для объединения нескольких графиков в одной сетке удобно использовать цикл. Например, если необходимо построить 4 графика функций sin с разными частотами:
for k = 1:4; subplot(2,2,k); plot(x, sin(k*x)); title(['sin(' num2str(k) '*x)']); end. Такой подход снижает количество повторяющегося кода и облегчает масштабирование.

Если требуется объединить графики с общими осями, используется параметр linkaxes, который синхронизирует масштабирование по оси X или Y. Это особенно полезно при сравнении временных рядов или сигналов с разными амплитудами.

Для оптимизации пространства между графиками применяется tight_layout или вручную задаются параметры Position через set(gca, 'Position', [...]). Это позволяет уменьшить перекрытие подписей и легенд, сохранив визуальную аккуратность.

Подход с subplot обеспечивает точный контроль над размещением графиков и упрощает анализ комплексных данных, когда важно одновременно видеть несколько зависимостей на одной фигуре.

Настройка размеров и пропорций отдельных подграфиков

Настройка размеров и пропорций отдельных подграфиков

В MATLAB функция subplot создает сетку подграфиков, но стандартные размеры могут не соответствовать требованиям визуализации. Для точной настройки используют свойства Position и OuterPosition объекта осей.

Пример изменения размеров подграфика:

ax = subplot(2,2,1);
ax.Position = [0.1 0.55 0.35 0.35]; % [x y ширина высота]

Основные рекомендации:

  • x и y задают левый нижний угол подграфика в нормированных координатах фигуры (0–1).
  • ширина и высота определяют занимаемую площадь. Для равномерного распределения используйте одинаковые значения ширины и высоты.
  • При перекрытии подграфиков корректируйте Position или увеличивайте subplot сетку.
  • Используйте tight_layout аналог, через tightfig или ручную корректировку OuterPosition, чтобы минимизировать пустое пространство.
  • Для разных пропорций подграфиков рекомендуется сначала определить размеры каждого блока, а затем расставлять по сетке с помощью координат.

Пример комбинирования нескольких размеров подграфиков:

ax1 = subplot(2,2,1); ax1.Position = [0.05 0.55 0.6 0.4];
ax2 = subplot(2,2,2); ax2.Position = [0.7 0.55 0.25 0.4];
ax3 = subplot(2,2,[3,4]); ax3.Position = [0.05 0.05 0.9 0.45];

Эта методика позволяет создавать нестандартные макеты, улучшая читаемость графиков и обеспечивая правильное соотношение сторон для визуализации данных.

Добавление заголовков и подписей к каждому subplot

Добавление заголовков и подписей к каждому subplot

Для назначения заголовка конкретному subplot в MATLAB используется функция title. После вызова subplot(m,n,p) необходимо указать title('Текст заголовка') именно для этого окна графика. Аналогично, оси подписываются через xlabel и ylabel. Это обеспечивает независимое оформление каждого подграфика.

Пример структурированного кода для двух subplot:

subplot(1,2,1);
plot(x1,y1);
title('График 1');
xlabel('Время, с');
ylabel('Амплитуда');

subplot(1,2,2);
plot(x2,y2);
title('График 2');
xlabel('Частота, Гц');
ylabel('Мощность');

Для одновременного изменения шрифта заголовков и подписей используют свойства 'FontSize' и 'FontWeight'. Рекомендуется устанавливать одинаковый стиль, чтобы обеспечить визуальное единообразие:

title('График 1','FontSize',12,'FontWeight','bold');
xlabel('Время, с','FontSize',10);
ylabel('Амплитуда','FontSize',10);

Для организации информации в табличной форме можно использовать uitable, однако для подписей к subplot лучше ограничиваться title, xlabel, ylabel и, при необходимости, legend. Пример добавления легенды:

subplot(2,1,1);
plot(x1,y1,'r',x1,y2,'b');
title('Сравнение сигналов');
xlabel('Время, с');
ylabel('Амплитуда');
legend({'Сигнал 1','Сигнал 2'});

Функция Назначение Пример
title Добавляет заголовок к subplot title('График 1')
xlabel Подписывает ось X xlabel('Время, с')
ylabel Подписывает ось Y ylabel('Амплитуда')
legend Добавляет легенду к графику legend({'Сигнал 1','Сигнал 2'})

При большом числе subplot удобно использовать циклы для назначения подписей, сохраняя соответствие между индексом subplot и текстом заголовка/оси. Это повышает читаемость кода и облегчает редактирование.

Использование разных типов графиков в одной сетке

Использование разных типов графиков в одной сетке

В MATLAB функция subplot позволяет размещать разные типы графиков в единой сетке, что упрощает сравнительный анализ данных. Например, комбинация линейного графика и гистограммы в одной фигуре позволяет одновременно оценить динамику и распределение значений.

Для создания сетки используйте синтаксис subplot(m,n,p), где m и n – количество строк и столбцов, а p – номер подграфика. Линейный график строится через plot(x,y), гистограмма – через histogram(data), а точечная диаграмма – через scatter(x,y). Например, subplot(2,2,1); plot(t,y) и subplot(2,2,2); histogram(y,20).

Важно учитывать масштаб осей. Если данные разных графиков сильно различаются, используйте команды yyaxis left и yyaxis right для отображения двух осей Y в одном подграфике. Это позволяет корректно визуализировать разнородные величины без искажения информации.

Для наглядности рекомендуется добавлять заголовки и подписи осей через title, xlabel и ylabel. Например, title('Линейный график и гистограмма') и ylabel('Частота') помогут различать типы данных в сетке.

Если графиков несколько, оптимально заранее определить размеры фигуры через figure('Position',[100 100 800 600]), чтобы элементы не перекрывались. Также полезно применять функцию grid on для улучшения восприятия точек и линий на графиках.

Использование разных типов графиков в одной сетке позволяет визуально сопоставлять временные ряды, распределения и корреляции, что повышает аналитическую ценность представленных данных.

Обновление данных в существующих подграфиках

Обновление данных в существующих подграфиках

Для обновления данных в subplot рекомендуется использовать сохранение дескрипторов графических объектов. При создании графика в подграфике сохраняйте дескриптор, например: h = plot(x, y);. Для изменения данных достаточно вызвать set(h, 'XData', newX, 'YData', newY); без повторного вызова subplot и plot. Это предотвращает перерисовку всей фигуры и сохраняет настройки осей и аннотаций.

Если на одном подграфике несколько линий, используйте массив дескрипторов: [h1, h2] = plot(x1, y1, x2, y2);. Обновление выполняется индивидуально: set(h1, 'YData', newY1); set(h2, 'YData', newY2);. Это особенно эффективно при работе с большими массивами данных.

Для динамических графиков с циклическим обновлением применяйте drawnow после изменения данных: set(h, 'YData', newY); drawnow;. Это гарантирует мгновенное отображение изменений без полной перерисовки фигуры. В случае анимаций предпочтительнее использовать animatedline и addpoints для поэтапного добавления точек.

При необходимости масштабирования осей автоматически после обновления данных используйте axis(h.Parent, 'tight'); или ylim(h.Parent, [minY maxY]);. Это позволяет сохранять актуальные границы осей, избегая искажения графика при смене диапазона значений.

Для многократного обновления данных без создания новых объектов рекомендуется очищать только содержимое подграфика с помощью cla(ax);, где ax – дескриптор осей, а затем строить новые линии. Такой подход сохраняет параметры subplot и другие подграфики на фигуре неизменными.

Сохранение фигуры с несколькими subplot

Сохранение фигуры с несколькими subplot

В MATLAB фигура с несколькими subplot сохраняется как единое изображение. Для корректного сохранения необходимо учитывать размеры окна и разрешение.

Рекомендации по сохранению:

  • Используйте команду set(gcf,'Position',[x y width height]) для установки точных размеров фигуры перед сохранением.
  • Для сохранения в высоком разрешении применяйте print с параметром -r: print('filename','-dpng','-r300'). Это особенно важно, если subplot содержат мелкие детали или текст.
  • Формат файла выбирайте исходя из назначения: -dpng для публикаций, -depsc для векторной графики в документах LaTeX.
  • Если subplot имеют разный масштаб осей, убедитесь, что axis tight применяется к каждому subplot отдельно перед сохранением.
  • Для автоматической оптимизации белого пространства используйте set(gcf,'PaperPositionMode','auto'), чтобы фигура сохранялась с пропорциями окна.

Пример сохранения фигуры с четырьмя subplot:

figure;
subplot(2,2,1); plot(x1,y1);
subplot(2,2,2); plot(x2,y2);
subplot(2,2,3); plot(x3,y3);
subplot(2,2,4); plot(x4,y4);
set(gcf,'Position',[100 100 800 600]);
set(gcf,'PaperPositionMode','auto');
print('myfigure','-dpng','-r300');

При пакетной обработке нескольких фигур рекомендуется сохранять каждую с уникальным именем, используя цикл и индекс:

for k = 1:N
figure;
subplot(2,1,1); plot(data{k,1});
subplot(2,1,2); plot(data{k,2});
filename = sprintf('figure_%02d.png',k);
print(filename,'-dpng','-r300');
end

Эти методы гарантируют, что все subplot сохраняются с правильным размером, читаемыми подписями и без обрезки элементов графиков.

Вопрос-ответ:

Как работает функция subplot в Matlab и для чего она нужна?

Функция subplot позволяет создавать несколько графиков в одном окне, разделяя пространство на сетку. Например, команда subplot(2,2,1) создаёт сетку из 2 строк и 2 столбцов и активирует первый элемент для построения графика. Это удобно, когда нужно сравнивать разные данные или визуализировать несколько функций одновременно.

Можно ли изменять размеры отдельных графиков внутри subplot?

Да, можно. По умолчанию все области графиков одинакового размера, но с помощью команды axes или свойств Position можно задать конкретные координаты и размеры для каждого графика. Например, axes(‘Position’,[0.1 0.5 0.35 0.4]) создаст график с указанными координатами и размерами в окне.

Как сохранить несколько графиков, созданных через subplot, в один файл?

Для сохранения используется функция saveas или print. После построения всех графиков достаточно вызвать, например, saveas(gcf,’figure.png’) или print(‘figure.pdf’,’-dpdf’). Это сохранит все графики, отображаемые в текущем окне, в один файл указанного формата.

Можно ли добавлять общие заголовки или подписи к осям для всех графиков в subplot?

Да, для этого используют команды sgtitle для общего заголовка, а для осей часто применяют xlabel и ylabel индивидуально к каждому графику. Также можно воспользоваться функцией annotation, чтобы размещать текстовые элементы вне отдельных графиков, создавая впечатление общих подписей.

Ссылка на основную публикацию