MATLAB® графика определяет поверхность по z-координатам точек над прямоугольной сеткой в плоскости x-y. График формируется путем соединения смежных точек с прямыми линиями. Объемные поверхностные диаграммы полезны для визуализации матриц, которые являются слишком большими для отображения в числовой форме, и для функций построения графика из двух переменных.
MATLAB может создавать различные формы объемных поверхностных диаграмм. Сетчатые графики являются поверхностями каркаса проводов, где окрашены только линии, соединяющие определяющие точки. На объемных поверхностных диаграммах отображаются как соединительные линии, так и грани поверхности в цвете. В этой таблице перечислены различные формы.
Функция | Используется для создания |
---|---|
mesh , surf | Объемная поверхностная диаграмма |
meshc , surfc | Объемная поверхностная диаграмма с контурным графиком под ним |
meshz | Объемная поверхностная диаграмма с навесным графиком (базовая плоскость) |
pcolor | Плоская объемная поверхностная диаграмма (значение пропорционально только цвету) |
surfl | Объемные поверхностные диаграммы, освещенные с заданного направления |
surface | Низкоуровневая функция (на которой основаны функции высокого уровня) для создания поверхностных графических объектов |
Эти функции применяются, когда необходимо перестроить и интерполировать данные, чтобы можно было представлять эти данные как поверхность.
Функция | Используется для создания |
---|---|
meshgrid | Прямоугольная сетка в 2-D и трехмерном пространстве |
griddata | Интерполяция данных , имеющих разбросов |
griddedInterpolant | Интерполяция для данных с сеткой |
scatteredInterpolant | Интерполяция данных , имеющих разбросов |
Для обсуждения того, как интерполировать данные, смотрите Интерполяция сетчатых данных и Интерполяция данных, имеющих разброс,.
mesh
и surf
команды создают 3-D объемные поверхностные диаграммы матричных данных. Если Z
- матрица, для которой элементы Z(i,j)
задайте высоту поверхности над базовым (i,j)
сетка, затем
mesh(Z)
генерирует цветной вид поверхности в проволочной системе координат и отображает его на 3-D виде. Точно так же,
surf(Z)
создает цветной, граненый вид поверхности и отображает его на 3-D виде. Обычно грани являются четырёхугольниками, каждая из которых является постоянным цветом, очерченным черными сетчатыми линиями, но shading
команда позволяет вам исключить линии сетки (shading flat
) или для выбора интерполированной затенения по грани (shading interp
).
Свойства объекта поверхности обеспечивают дополнительный контроль над визуальным внешним видом поверхности. Можно задать ребро стилей линии, маркеры вершин, окрашивание лица, характеристики освещения и так далее.
Чтобы отобразить функцию от двух переменных, z = f (x,y
), сгенерируйте X
и Y
матрицы, состоящие из повторных строк и столбцов, соответственно, в области определения функции. Вы будете использовать эти матрицы, чтобы вычислить и построить график функции.
meshgrid
функция преобразует область, заданную двумя векторами, x
и y
, в матрицы X
и Y
. Затем вы используете эти матрицы, чтобы вычислить функции двух переменных: Строки X
являются копиями вектора x
и столбцы Y
являются копиями вектора y
.
Чтобы проиллюстрировать использование meshgrid
, рассмотрите sin(r)/r
или sinc
функция. Чтобы вычислить эту функцию между -8 и 8 в обоих x и y, вам нужно передать только один векторный аргумент, чтобы meshgrid
, который затем используется в обоих направлениях.
[X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps;
Матрица R
содержит расстояние от центра матрицы, которое является источником. Добавление eps
предотвращает деление на нуль (на следующем шаге), которое приводит к Inf
значения в данных.
Формирование sinc
функции и графики Z
с mesh
результаты в поверхности 3-D.
Z = sin(R)./R; figure mesh(X,Y,Z)
По умолчанию MATLAB удаляет скрытые от вида линии на сетчатых графиках, даже если грани графика не заполнены. Вы можете отключить удаление скрытых линий и позволить граням сетчатого графика быть прозрачными с hidden
команда:
hidden off
MATLAB предоставляет ряд методов, которые могут улучшить информационное содержимое ваших графиков. Для примера этот график sinc
функция использует те же данные, что и предыдущий график, но использует подсветку, корректировки вида и другую палитру, чтобы подчеркнуть форму графической функции (daspect
, axis
, view
, camlight
).
figure colormap hsv surf(X,Y,Z,'FaceColor','interp',... 'EdgeColor','none',... 'FaceLighting','gouraud') daspect([5 5 1]) axis tight view(-50,30) camlight left
См. surf
функция для получения дополнительной информации о объемных поверхностных диаграммах.
Вы можете использовать meshgrid
создать сетку равномерно выборочных данных точек, в которой можно вычислить и построить график sinc
функция. MATLAB затем создает объемную поверхностную диаграмму, соединяя соседние элементы матрицы, чтобы сформировать mesh квадрилатералей.
Чтобы создать объемную поверхностную диаграмму из неоднородно выборочных данных, используйте scatteredInterpolant
для интерполяции значений в равномерно разнесенных точках, а затем используйте mesh
и surf
обычным способом.
Этот пример оценивает sinc
функция в случайных точках в определенной области значений, а затем генерирует равномерно выбранные данные для отображения в качестве объемной поверхностной диаграммы. Процесс включает в себя следующие задачи:
Использовать linspace
чтобы сгенерировать равномерно расположенные значения в области значений ваших неравномерно выбранных данных.
Использовать meshgrid
чтобы сгенерировать сетку графического изображения с выходом linspace
.
Использование scatteredInterpolant
для интерполяции нерегулярно дискретизированных данных в регулярно разнесенную сетку, возвращаемую meshgrid
.
Используйте функцию построения графика, чтобы отобразить данные.
Сгенерируйте неравномерно выбранные данные в области значений [-8, 8] и используйте их для оценки функции:
x = rand(100,1)*16 - 8; y = rand(100,1)*16 - 8; r = sqrt(x.^2 + y.^2) + eps; z = sin(r)./r;
The linspace
функция предоставляет удобный способ создания равномерно разнесенных данных с желаемым количеством элементов. Следующие операторы производят векторы по области значений случайных данных с таким же разрешением, как и у оператора -8: .5: 8 в предыдущей sinc
пример:
xlin = linspace(min(x),max(x),33); ylin = linspace(min(y),max(y),33);
Теперь используйте эти точки, чтобы сгенерировать равномерно разнесенную сетку:
[X,Y] = meshgrid(xlin,ylin);
Ключ к этому процессу - использовать scatteredInterpolant
для интерполяции значений функции в равномерно разнесенных точках на основе значений функции в исходных точках данных (которые являются случайными в этом примере). Этот оператор использует линейную интерполяцию по умолчанию, чтобы сгенерировать новые данные:
f = scatteredInterpolant(x,y,z); Z = f(X,Y);
Постройте график интерполированных и неоднородных данных для создания:
figure mesh(X,Y,Z) %interpolated axis tight; hold on plot3(x,y,z,'.','MarkerSize',15) %nonuniform
Предположим, что у вас есть набор данных со следующими (X, Y, Z) триплетами:
X | Y | Z |
---|---|---|
1 | 1 | 152 |
2 | 1 | 89 |
3 | 1 | 100 |
4 | 1 | 100 |
5 | 1 | 100 |
1 | 2 | 103 |
2 | 2 | 0 |
3 | 2 | 100 |
4 | 2 | 100 |
5 | 2 | 100 |
1 | 3 | 89 |
2 | 3 | 13 |
3 | 3 | 100 |
4 | 3 | 100 |
5 | 3 | 100 |
1 | 4 | 115 |
2 | 4 | 100 |
3 | 4 | 187 |
4 | 4 | 200 |
5 | 4 | 111 |
1 | 5 | 100 |
2 | 5 | 85 |
3 | 5 | 111 |
4 | 5 | 97 |
5 | 5 | 48 |
Можно представлять данные, которые находятся в векторной форме, используя различные типы график MATLAB, такие как surf
, contour
, и stem3
, путем первой реструктуризации данных. Используйте значения (X, Y), чтобы задать координаты в плоскости x-y, в которой есть значение Z. reshape
и transpose
функции могут реструктурировать ваши данные так, чтобы триплеты (X, Y, Z) образовали прямоугольную сетку:
x = reshape(X,5,5)'; y = reshape(Y,5,5)'; z = reshape(Z,5,5)';
Изменение формы приводит к трем массивам 5 на 5:
x = 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 y = 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 z = 152 89 100 100 100 103 0 100 100 100 89 13 100 100 100 115 100 187 200 111 100 85 111 97 48
Теперь можно представлять значения Z относительно X и Y. Для примера создайте 3-D ствол графика:
stem3(x,y,z,'MarkerFaceColor','g')
Функции, которые рисуют поверхности, могут взять двух дополнительных векторных или матричных аргументов, чтобы описать поверхности с конкретными данными x и y. Если Z
- матрица m на n, x
является n-вектором, и y
является m-вектором, тогда
mesh(x,y,Z,C)
описывает поверхность сетки с вершинами, имеющими цвет C(i,j)
и расположен в точках
(x(j), y(i), Z(i,j))
где x
соответствует столбцам Z
и y
к его строкам.
В более общем случае, если X
, Y
, Z
, и C
являются матрицами тех же размерностей, тогда
mesh(X,Y,Z,C)
описывает поверхность сетки с вершинами, имеющими цвет C(i,j)
и расположен в точках
(X(i,j), Y(i,j), Z(i,j))
Этот пример использует сферические координаты, чтобы нарисовать сферу и окрасить ее с помощью шаблона плюсов и минусов в матрице Адамара, ортогональной матрице, используемой в теории кодирования обработки сигналов. Векторы theta
и phi
находятся в области значений -
, ≤ theta
≤ и -
.r /2
≤ phi
≤ и /2
. Потому что theta
является вектором-строкой и phi
является вектором-столбцом, умножениями, которые генерируют матрицы X
, Y
, и Z
являются векторными векторными произведениями.
figure k = 5; n = 2^k-1; theta = pi*(-n:2:n)/n; phi = (pi/2)*(-n:2:n)'/n; X = cos(phi)*cos(theta); Y = cos(phi)*sin(theta); Z = sin(phi)*ones(size(theta)); colormap([0 0 0;1 1 1]) C = hadamard(2^k); surf(X,Y,Z,C) axis square