Управление соотношением сторон осей

Axes Aspect Ratio Properties

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

Свойство

Описание

DataAspectRatio

Устанавливает относительное масштабирование отдельных значений данных оси. Установите DataAspectRatio к [1 1 1] отобразить реальные объекты в правильных пропорциях. Определение значения для DataAspectRatio переопределения "растянуть для заполнения" поведение.

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

DataAspectRatioMode

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

PlotBoxAspectRatio

Устанавливает пропорции поля графика осей (установите box к on видеть поле). Определение значения для PlotBoxAspectRatio переопределения "растянуть для заполнения" поведение.

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

PlotBoxAspectRatioMode

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

Position

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

XLim, YLim, ZLim

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

XLimMode , YLimMode , ZLimMode

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

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

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

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

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

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

Значения свойств значения по умолчанию 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')

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

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

Изменение осей, чтобы поместиться в окно рисунка может изменить соотношение сторон графика. 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])

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

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

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

Aspect Ratio Properties

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

DataAspectRatio

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

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

daspect
ans = 1×3

     4     8     1

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

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

daspect([1 1 1])

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

Графическое изображение соотношения сторон поля

Рассмотрение значения PlotBoxAspectRatio поскольку график в предыдущем разделе показывает, что это теперь взяло бывшее значение DataAspectRatio. pbaspect функция к возвращает значение PlotBoxAspectRatio:

pbaspect
ans = 1×3

     4     8     1

Заметьте, что MATLAB перемасштабировал поле графика, чтобы вместить график с помощью заданного DataAspectRatio.

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

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

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

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

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

Корректировка пределов по осям

Оси также имеют свойства для установки 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])

Если вы запрашиваете соотношение сторон поля графика, вы видите что 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)

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

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