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

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

Графика MATLAB® задает поверхность z-координатами точек выше прямоугольной сетки в x-y плоскости. График формируется путем присоединения смежных точек с прямыми линиями. Объемные поверхностные диаграммы полезны для визуализации матриц, которые являются слишком большими, чтобы отобразиться в числовой форме и для функций построения графика двух переменных.

MATLAB может создать различные формы объемных поверхностных диаграмм. Сетчатые графики являются каркасными поверхностями, которые окрашивают только линии, соединяющие определяющие точки. Объемные поверхностные диаграммы отображают и соединительные линии и полигоны поверхности в цвете. Эта таблица приводит различные формы.

Функция

Используемый, чтобы создать

mesh, surf

Объемная поверхностная диаграмма

meshc, surfc

Объемная поверхностная диаграмма с контурным графиком ниже его

meshz

Объемная поверхностная диаграмма с графиком занавеса (ссылочная плоскость)

pcolor

График плоской поверхности (значение пропорционально только, чтобы окрасить),

surfl

Объемная поверхностная диаграмма освещается от заданного направления

surface

Низкоуровневая функция (на котором высокоуровневые функции базируются) для создания поверхностных графических объектов

Функции для Gridding и Interpolating Data

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

Функция

Используемый, чтобы создать

meshgrid

Прямоугольная сетка на 2D и 3-D пробеле

griddata

Интерполируйте данные, имеющий разброс

griddedInterpolant

Interpolant для данных с координатной сеткой

scatteredInterpolant

Интерполируйте данные, имеющий разброс

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

Сетчатые графики и объемные поверхностные диаграммы

mesh и команды surf создают 3-D объемные поверхностные диаграммы матричных данных. Если Z является матрицей, для которой элементы Z(i,j) задают высоту поверхности по базовой сетке (i,j), то

mesh(Z)

генерирует цветное, каркасное представление поверхности и отображает его в 3-D представлении. Точно так же

surf(Z)

генерирует цветное, фасетное представление поверхности и отображает его в 3-D представлении. Обычно, фасеты являются четырехугольниками, каждый из которых является постоянным цветом, обрисованным в общих чертах с черными строками mesh, но команда shading позволяет вам устранять строки mesh (shading flat) или выбирать интерполированную штриховку через фасет (shading interp).

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

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

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

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

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

Чтобы проиллюстрировать использование meshgrid, рассмотрите функция sinc или sin(r)/r. Чтобы выполнить эту функцию между-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 затем создает объемную поверхностную диаграмму путем соединения соседних элементов матрицы, чтобы сформировать сетку четырехугольников.

Чтобы произвести объемную поверхностную диаграмму из неоднородно выборочных данных, используйте 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. Функция 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)

описывает поверхность mesh с вершинами, имеющими цветной C(i,j) и расположенный в точках

(x(j), y(i), Z(i,j))

где x соответствует столбцам Z и y к его строкам.

В более общем плане, если X, Y, Z и C являются матрицами тех же размерностей, то

mesh(X,Y,Z,C)

описывает поверхность mesh с вершинами, имеющими цветной C(i,j) и расположенный в точках

(X(i,j), Y(i,j), Z(i,j))

Этот пример использует сферические координаты, чтобы чертить сферу и окрасить ее с шаблоном плюсов и минусов в матрице Адамара, ортогональная матрица используемый в теории кодирования обработки сигналов. Векторы theta и phi находятся в области значений - π ≤ theta ≤ π и - π/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