exponenta event banner

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

Свойства пропорций осей

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

Собственность

Описание

DataAspectRatio

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

Задать с помощью daspect

DataAspectRatioMode

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

PlotBoxAspectRatio

Задание пропорций поля печати осей (set box кому on для просмотра поля). Задание значения для PlotBoxAspectRatio переопределяет поведение «растяжение-заливка».

Задать с помощью pbaspect

PlotBoxAspectRatioMode

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

Position

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

XLim, YLim, ZLim

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

XLimMode , YLimMode , ZLimMode

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

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

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

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

Важно понимать, как свойства взаимодействуют друг с другом, чтобы получить нужные результаты. DataAspectRatio, PlotBoxAspectRatioи пределы осей X, Y и Z (XLim, YLim, и ZLim свойства) все наложить зависимости на форму осей.

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

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.

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. pbaspect функция для возврата значения PlotBoxAspectRatio:

pbaspect
ans = 1×3

     4     8     1

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

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

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

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

Продолжая пример с сеткой, если задать оба свойства, 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.