Манипуляция соотношением сторон осей

Свойства соотношения сторон осей

axis команда работает путем установки различных свойств объекта осей. Можно задать эти свойства непосредственно, чтобы достичь именно того эффекта, который вы хотите.

Свойство

Описание

DataAspectRatio

Устанавливает относительное масштабирование значений данных отдельных осей. Задайте DataAspectRatio на [1 1 1] отображение объектов реального мира в правильных пропорциях. Задание значения для DataAspectRatio переопределяет поведение «растягивание к заливке».

Установите с daspect

DataAspectRatioMode

В auto, MATLAB® программа выбирает шкалы осей, которые обеспечивают наивысшее разрешение в доступном пространстве.

PlotBoxAspectRatio

Устанавливает пропорции графика осей (set box на on чтобы увидеть коробку). Задание значения для PlotBoxAspectRatio переопределяет поведение «растягивание к заливке».

Установите с pbaspect

PlotBoxAspectRatioMode

В autoMATLAB устанавливает PlotBoxAspectRatio на [1 1 1] если вы явным образом не задаете DataAspectRatio и/или пределы по осям.

Position

Определяет местоположение и размер осей с четырехэлементным вектором: [смещение влево, смещение внизу, ширина, высота].

XLim, YLim, ZLim

Устанавливает минимальные и максимальные пределы соответствующих осей.

XLimMode , YLimMode , ZLimMode

В autoMATLAB выбирает пределы по осям.

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

Значение, выбранное для конкретного свойства, зависит, в основном, от типа данных, которые необходимо отобразить. Большая часть данных, визуализированных с помощью MATLAB, либо

  • Числовые данные отображаются как линии, сетчатые графики или другие специализированные графики

  • Представления объектов реального мира (например, моторное транспортное средство или раздел земной топографии)

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

Значения свойств MATLAB по умолчанию разработаны для

  • Выберите пределы по осям, чтобы охватить область значений данных (когда XLimMode, YLimMode, и ZLimMode заданы как auto).

  • Обеспечьте наивысшее разрешение в доступном пространстве путем установки шкалы каждой оси независимо (когда DataAspectRatioMode и PlotBoxAspectRatioMode заданы как auto).

  • Нарисуйте оси, которые соответствуют прямоугольнику положения путем регулировки CameraViewAngle а затем при необходимости растянуть для заливки осей.

Выбор соотношения сторон по умолчанию

Область осей Position свойство задает местоположение и размерности осей внутри рисунка. Третий и четвертый элементы Position вектор (ширина и высота) задает прямоугольник, в котором MATLAB рисует оси. MATLAB подбирает оси к этому прямоугольнику.

Значение по умолчанию для осей Units свойство нормировано к родительским размерностям рисунка. Это означает, что форма окна рисунка определяет форму прямоугольника положения. Когда вы изменяете размер окна рисунка, MATLAB изменяет форму прямоугольника положения, чтобы соответствовать ему.

sphere
set(gcf,'Color',[0.90 0.90 0.90])
set(gca,'BoxStyle','full','Box','on')

Figure contains an axes. The axes contains an object of type surface.

Изменение размера и формы рисунка приводит к изменению размера и формы осей. Можно также выбрать новые положения метки деления на оси.

f = gcf;
f.Position(3) = f.Position(3) * 0.67;

Figure contains an axes. The axes contains an object of type surface.

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

Поддержание пропорций осей при изменении размера фигуры

Чтобы сохранить конкретную форму, можно задать размер осей в абсолютных модулях, таких как дюймы, которые не зависят от размера окна рисунка. Однако это не является хорошим подходом, если вы пишете программу MATLAB, которую хотите работать с окном рисунка любого размера. Лучший подход состоит в том, чтобы задать соотношение сторон осей и переопределить автоматическое растяжение к заливке.

В тех случаях, когда требуется определенное соотношение сторон, можно переопределить растяжение, задав значение для этих свойств осей:

  • DataAspectRatio или DataAspectRatioMode

  • PlotBoxAspectRatio или PlotBoxAspectRatioMode

  • CameraViewAngle или CameraViewAngleMode

Первые два набора свойств влияют на соотношение сторон непосредственно. Установка значения любого из свойств режима вручную просто отключает растяжение до заливки с сохранением всех значений текущих свойств. В этом случае MATLAB увеличивает оси, пока одна размерность прямоугольника положения не ограничивает его. Для примера установите DataAspectRatio на [1 1 1]. Также установите цвет рисунка, чтобы увидеть связь между рисунком и осями.

sphere
daspect([1 1 1])
set(gca,'BoxStyle','full','Box','on')
set(gcf,'Color',[0.90 0.90 0.90])

Figure contains an axes. The axes contains an object of type surface.

Изменение размера и формы рисунка не изменяет соотношение сторон осей.

f = gcf;
f.Position(3) = f.Position(3) * 0.67;

Figure contains an axes. The axes contains an object of type surface.

Установка CameraViewAngle свойство отключает растяжение к заливке, а также препятствует корректировке MATLAB размера осей при изменении вида.

Свойства соотношения сторон

Важно понять, как свойства взаимодействуют друг с другом, порядок получить желаемые результаты. The DataAspectRatio, PlotBoxAspectRatio, и пределы x -, y - и z-осей (XLim, YLim, и ZLim свойства) все наложить ограничения на форму осей.

Соотношение сторон данных

The DataAspectRatio свойство управляет отношением шкал осей. Для примера, чтобы отобразить объемную поверхностную диаграмму математического выражения, MATLAB выбирает соотношение сторон данных, который подчеркивает значения функции:

[X,Y] = meshgrid((-2:.15:2),(-4:.3:4));
Z = X.*exp(-X.^2 - Y.^2);
surf(X,Y,Z)
set(gca,'BoxStyle','full','Box','on')

Figure contains an axes. The axes contains an object of type surface.

The daspect функция возвращает фактическое значение DataAspectRatio свойство.

daspect
ans = 1×3

     4     8     1

Это означает, что четыре модулей длины вдоль оси X покрывают те же значения данных, что и восемь модулей длины вдоль оси Y и один модуль длины вдоль оси Z. Оси заполняют график, который имеет соотношение сторон [1 1 1] по умолчанию.

Если необходимо просмотреть объемную поверхностную диаграмму так, чтобы относительные величины вдоль каждой оси были равны друг другу, можно задать DataAspectRatio на [1 1 1].

daspect([1 1 1])

Figure contains an axes. The axes contains an object of type surface.

Установка значения DataAspectRatio свойство также устанавливает DataAspectRatioMode на manual и переопределяет растяжение до заливки, так что достигается заданное соотношение сторон.

Соотношение сторон коробки графика

Смотрите на значение PlotBoxAspectRatio для графика в предыдущем разделе показано, что теперь оно приняло прежнее значение DataAspectRatio. The pbaspect функция для возвратов значения PlotBoxAspectRatio:

pbaspect
ans = 1×3

     4     8     1

Заметьте, что MATLAB пересмотрел график графика, используя заданную DataAspectRatio.

The PlotBoxAspectRatio свойство управляет формой графика осей. По умолчанию MATLAB устанавливает это свойство на [1 1 1] и настраивает DataAspectRatio свойство так, чтобы графики заполняли график или до достижения ограничения.

Когда вы задаете значение DataAspectRatio, и тем самым препятствует его изменению, MATLAB изменяет PlotBoxAspectRatio вместо этого.

Если вы задаете оба DataAspectRatio и PlotBoxAspectRatioMATLAB вынужден изменить пределы по осям, чтобы соответствовать двум уже заданным ограничениям.

Продолжая пример сетки, если вы задаете оба свойства, MATLAB изменяет пределы по осям, чтобы удовлетворить двум ограничениям, наложенным на оси.

daspect([1 1 1])
pbaspect([1 1 1])

Figure contains an axes. The axes contains an object of type surface.

Корректирующие пределы по осям

Оси также имеют свойства для установки пределов по оси X -, Y - и Z. Однако установка пределов по осям с помощью PlotBoxAspectRatio и DataAspectRatio свойства чрезмерно напряжают оси. Например, эта команда задает пределы по осям, которые конфликтуют с PlotBoxAspectRatio значение.

set(gca,'DataAspectRatio',[1 1 1],...
        'PlotBoxAspectRatio',[1 1 1],...
        'XLim',[-4 4],...
        'YLim',[-4 4],...
        'ZLim',[-1 1])

Figure contains an axes. The axes contains an object of type surface.

Если вы запросите прямоугольный график соотношения сторон, то можете увидеть, что PlotBoxAspectRatio значение изменено с учетом пределов по осям.

pbaspect
ans = 1×3

     4     4     1

Отображение реальных объектов

Если вы хотите отобразить объект так, чтобы он выглядел реалистично, необходимо изменить параметры MATLAB по умолчанию. Для примера эти данные определяют клиновидную закрашенную фигуру объекта.

vert = [0 0 0; 0 1 0; 1 1 0; 1 0 0; 0 0 1; 0 1 1; 1 1 4; 1 0 4];
fac = [1 2 3 4; 2 6 7 3; 4 3 7 8; 1 5 8 4; 1 2 6 5; 5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
   'FaceColor',[0.7 0.7 0.7],'EdgeColor','k')
view(3)

Figure contains an axes. The axes contains an object of type patch.

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

set(gca,'DataAspectRatio',[1 1 1])

Figure contains an axes. The axes contains an object of type patch.