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

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

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

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

Функция

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

mesh, surf

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

meshc, surfc

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

meshz

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

pcolor

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

surfl

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

surface

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

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

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

Функция

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

meshgrid

Прямоугольная сетка в 2D и трехмерном пространстве

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

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

В более общем плане, если XYZ, и 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 вектор-столбец, умножение, которое производит матрицы XY, и 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