subplot, 3D-графики и оформление
Когда одного графика мало: сетка из подграфиков и трёхмерные поверхности.
subplot(m, n, k)делит окно на сетку m×n и делает активной k-ю ячейку для рисования.
Несколько графиков рядом
Чтобы показать несколько графиков в одном окне, используют subplot. Он разбивает фигуру на сетку и выбирает текущую ячейку. Нумерация идёт по строкам, слева направо. Каждая ячейка — самостоятельные оси со своими подписями.
x = linspace(0, 2*pi, 100);
subplot(2, 1, 1); % сетка 2x1, верхняя ячейка
plot(x, sin(x)); title('sin');
subplot(2, 1, 2); % нижняя ячейка
plot(x, cos(x)); title('cos');
Так удобно сравнивать связанные величины: сигнал и его спектр, исходные данные и аппроксимацию.
Трёхмерные графики
MATLAB силён и в 3D. Для поверхности z = f(x, y) сначала строят сетку координат функцией meshgrid, затем рисуют surf (закрашенная поверхность) или mesh (каркас). Линию в пространстве рисует plot3.
[X, Y] = meshgrid(-2:0.2:2, -2:0.2:2);
Z = X.^2 + Y.^2; % параболоид
surf(X, Y, Z);
xlabel('x'); ylabel('y'); zlabel('z');
colorbar; % шкала цвета
Функция meshgrid возвращает две матрицы координат, а поэлементная формула X.^2 + Y.^2 сразу вычисляет высоту в каждой точке сетки. Это снова векторизация — высота считается для всей сетки разом.
Оформление и сохранение
| Команда | Назначение |
axis equal | одинаковый масштаб осей |
xlim/ylim | пределы осей |
colormap | цветовая палитра |
view(az, el) | угол обзора 3D |
saveas / exportgraphics | сохранить в файл |
Готовый рисунок сохраняют командой exportgraphics(gcf, 'plot.png') — gcf означает «текущая фигура». Это путь к иллюстрациям публикационного качества.
Как работает под капотом
3D-поверхность — это та же матрица высот Z, наложенная на сетку X, Y. MATLAB раскрашивает каждую клетку по значению Z, интерполируя цвет из палитры (colormap). Поэтому 3D-график по сути визуализирует матрицу: цвет = значение. Та же идея лежит в основе imagesc и contour — разные способы показать одну матрицу чисел как картинку. Осознав это, вы видите графику MATLAB как естественное продолжение матричной модели данных.
Поворот, освещение и восприятие 3D
Трёхмерные графики коварны тем, что одна и та же поверхность под разным углом выглядит совершенно по-разному, и неудачный ракурс способен скрыть важную деталь. Команда view(az, el) задаёт азимут и угол возвышения камеры, rotate3d on позволяет крутить фигуру мышью, а camlight и shading interp добавляют освещение и сглаживание, делая форму нагляднее. Часто полезнее показать поверхность не в перспективе, а сверху — линиями уровня contour или цветовой картой imagesc, где значения читаются точнее, чем по наклонной 3D-картинке. Выбор между объёмным видом и плоской проекцией — это вопрос о том, что именно вы хотите донести: общую форму рельефа или точные значения в конкретных точках.
Частые ошибки
- Перепутать аргументы
subplot: третий — номер ячейки, а не размер. - Рисовать
surf(Z)без согласованныхX,Yотmeshgrid— оси будут неверными. - Забыть
.^в формуле поверхности и получить ошибку размерности.
tiledlayout — современная замена subplot
Классический subplot работает везде, но в новых версиях MATLAB появился более гибкий механизм компоновки — tiledlayout с функцией nexttile. Он лучше управляет отступами между подграфиками, позволяет объединять ячейки и добавлять общие заголовки и подписи осей для всей сетки сразу. Если subplot жёстко режет окно на равные ячейки, то tiledlayout даёт «плитки», которые можно компоновать свободнее. Для учебных задач хватает и subplot, но, встретив tiledlayout в чужом коде, вы будете знать, что это его современный, более удобный наследник, решающий те же задачи компоновки нескольких графиков.
Визуализация матриц напрямую
Связь графики с матричной моделью данных особенно наглядна в функциях, которые рисуют матрицу как картинку. imagesc(A) отображает матрицу как цветное поле, где цвет каждой клетки кодирует её значение, — так смотрят на изображения, тепловые карты, матрицы корреляций. contour(A) рисует линии уровня, pcolor — псевдоцветную карту. Все они берут одну матрицу и превращают её в наглядное изображение, без всякого x и y. Это, пожалуй, самое прямое воплощение идеи «матрица — это данные, а график — её визуальная проекция»: вы буквально смотрите на числа глазами, видя структуру, которую в столбцах не разглядеть.
Итоги
subplot(m,n,k)размещает несколько графиков в сетке.meshgrid+surf/meshстроят 3D-поверхности;plot3— линию в пространстве.- 3D-график визуализирует матрицу высот; сохранение —
exportgraphics.