Представление данных как поверхности

Функции для графического изображения сетки данных

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).

Свойства объекта поверхности обеспечивают дополнительный контроль над визуальным внешним видом поверхности. Можно задать ребро стилей линии, маркеры вершин, окрашивание лица, характеристики освещения и так далее.

Функции визуализации двух переменных

  1. Чтобы отобразить функцию от двух переменных, z = f (x,y), сгенерируйте X и Y матрицы, состоящие из повторных строк и столбцов, соответственно, в области определения функции. Вы будете использовать эти матрицы, чтобы вычислить и построить график функции.

  2. meshgrid функция преобразует область, заданную двумя векторами, x и y, в матрицы X и Y. Затем вы используете эти матрицы, чтобы вычислить функции двух переменных: Строки X являются копиями вектора x и столбцы Y являются копиями вектора y.

Пример 1. Пример: Иллюстрация использования meshgrid

Чтобы проиллюстрировать использование 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.

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

  1. Сгенерируйте неравномерно выбранные данные в области значений [-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;
    
  2. The linspace функция предоставляет удобный способ создания равномерно разнесенных данных с желаемым количеством элементов. Следующие операторы производят векторы по области значений случайных данных с таким же разрешением, как и у оператора -8: .5: 8 в предыдущей sinc пример:

    xlin = linspace(min(x),max(x),33);
    ylin = linspace(min(y),max(y),33);
    
  3. Теперь используйте эти точки, чтобы сгенерировать равномерно разнесенную сетку:

    [X,Y] = meshgrid(xlin,ylin);
    
  4. Ключ к этому процессу - использовать scatteredInterpolant для интерполяции значений функции в равномерно разнесенных точках на основе значений функции в исходных точках данных (которые являются случайными в этом примере). Этот оператор использует линейную интерполяцию по умолчанию, чтобы сгенерировать новые данные:

    f = scatteredInterpolant(x,y,z);
    Z = f(X,Y);
  5. Постройте график интерполированных и неоднородных данных для создания:

    figure
    mesh(X,Y,Z) %interpolated
    axis tight; hold on
    plot3(x,y,z,'.','MarkerSize',15) %nonuniform
    

Изменение формы данных

Предположим, что у вас есть набор данных со следующими (X, Y, Z) триплетами:

XYZ
11152
2189
31100
41100
51100
12103
220
32100
42100
52100
1389
2313
33100
43100
53100
14115
24100
34187
44200
54111
15100
2585
35111
4597
5548

Можно представлять данные, которые находятся в векторной форме, используя различные типы график 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 /2phi ≤ и /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