
- •2.5.2. Специальные типы двумерных графиков.
- •2.5.2.1.Диаграммы.
- •2.5.2.2.Гистограммы векторных данных.
- •2.6. Низкоуровневая графика.
- •2.6.1.Основы дескрипторной графики.
- •2.6.1.1. Графические объекты
- •2.6.1.2. Иерархия объектов.
- •2.6.2. Функции set и get, текущие объекты.
- •2.6.3.Указатели на объекты.
2.6.1.1. Графические объекты
Среди всех графических объектов выделяются базовые (Core): оси (Axes), рисунки (Image), источники света (Light), линии (Line), поверхности (Surface), полигональные объекты (Patch) и прямоугольники (Rectangle). Базовые объекты являются основой для создания более сложных композитных объектов (Composite objects). Практически все графические объекты, рассмотренные выше,— композитные. Кроме указанных объектов часто используется корневой объект Root для получения информации о текущем разрешении монитора.
Многие высокоуровневые графические функции группируют базовые объекты для получения требуемого результата в виде рисованных объектов (Plot objects).
2.6.1.2. Иерархия объектов.
Для освоения материала необходимы два понятия из области объектно-ориентированного программирования — предок и потомок. Объект самого верхнего уровня Root не имеет предков, а его потомками являются графические окна — объекты Figure. Свойства Root позволяют произвести некоторые глобальные установки MATLAB. Объект Figure представляет собой отдельное графическое окно. У Root может быть много потомков Figure, т. е. в MATLAB может быть открыто одновременно произвольное число графических окон. Оси являются потомком графического окна и предком для базовых, рисованных и группированных объектов. Невидимые оси слоя примечаний так же являются потомками графического окна и предками для поясняющих объектов. Свойства Parent и Children каждого объекта содержат указатели на его предков и потомков соответственно. Поскольку у объекта Root нет предка, то значением Parent является пустой массив, а у объектов самого низкого уровня отсутствуют потомки, следовательно, значением их свойства children так же является пустой массив. При наличии у объекта нескольких потомков свойство children содержит вектор указателей на них.
Достаточно полная иерархическая структура объектов MATLAB, за исключением элементов управления приложением с графическим интерфейсом, приведена на рисунке [1, с. 524] :
2.6.2. Функции set и get, текущие объекты.
По умолчанию при исполнении функции plot создаются три графических объекта: графическое окно Figure 1, оси и линия графика. Манипулирование свойствами объектов в MATLAB производится функциями get и set. Функция get предназначена для получения значений свойств, a set для установки новых значений. При этом функциям get и set следует указывать, с каким из существующих объектов ведется работа. Имеется три стандартных функции, возвращаемые значения которых могут быть использованы в качестве входного аргумента функций get и set:
- gcf — текущее графическое окно;
- gca — текущие оси;
- gсо — текущий графический объект.
Если есть только одно графическое окно, то оно и является текущим. Единственные оси в графическом окне также являются текущими.
Например, чтобы вывести в командное окно свойства осей текущего графика выполняется команда:
» get(gca)
В командном окне отобразятся примерно 100 строк свойств и их значений. Среди свойств есть очевидные, а назначение некоторых на первый взгляд кажется непонятным. Свойства осей условно можно разделить на две группы — общие свойства и свойства каждой из осей x, у или z . Название свойств второй группы начинается с соответствующей буквы х, y или z.
Функция get допускает обращение к ней с двумя входными аргументами, вторым аргументом является название свойства, значение которого требуется получить, например:
» fn = get(gca,'FontName')
Эта команда записывает название шрифта, используемого в текущих осях, в строковую переменную fn и выводит ее значение на экран:
fn =
Helvetica
Некоторые свойства, отвечающие за внешний вид осей:
Название свойства |
Описание |
Значения |
Box |
Заключение осей в прямоугольную рамку |
'on' (по умолчанию)или 'off '
|
Color |
Цвет фона осей |
Вектор из трех элементов, задающий цвет в формате RGB, например [l 11], или один из определенных цветов: r, g и т. д. (см.[1, приложение 1]). По умолчанию цвет белый. |
FontAngle |
Наклон шрифта разметки осей |
'normal' (по умолчанию) или 'italic'
|
FontName |
Название шрифта |
Строка с названием шрифта, например 'Courier'
|
FontWeight |
Толщина шрифта |
'normal'(по умолчанию), 'bold', 'light', или 'demi' |
GridLineStyle |
Стиль линий сетки |
'-', '--', ': ' (по умолчанию) '-. ' или 'nоnе’ |
LineWidth |
Толшина линий осей |
Значение в пунктах (по умолчанию 0.5) |
Visible |
Отображение осей |
'on' (по умолчанию оси видны), 'off ' |
DataAspectRatio |
Масштаб осей |
Вектор из трех элементов, задающий относительный масштаб по каждой из осей |
FlotBoxAspectRatio |
Размеры осей |
Вектор из трех элементов, задающий относительные размеры каждой из осей |
Свойства каждой из осей (на примере оси X):
Название свойства |
Описание |
Значения |
XColor |
Цвет оси |
Вектор из трех элементов, задающий цвет в формате RGB, например, [111] или один из определенных цветов: ' r' , 'g' и т.д. (см. [1, приложение 1]). |
XDir |
Направление оси |
'normal' или 'reverse' (обратное) |
XGrid |
Сетка, перпендикулярная оси |
'on' или 'off ' |
XAxisLocation |
Расположение оси (для оси z отсутствует) |
'top' или 'bottom' ('right' или 'left' для оси У ) |
XLim |
Пределы изменения переменной |
Вектор из двух компонент, равных пределам изменения переменной, например, [-1.5 2.3] |
XScale |
Масштаб оси |
'linear' или 'log' |
XTick |
Координаты разметки оси |
Вектор с координатами разметки, например, [0 1 3 5] |
XTickLabel |
Разметка оси |
Вектор ячеек с названиями разметки (число ячеек равно длине вектора с координатами разметки), например, {'zero'; 'one'; 'three'; 'five'} |
Команда set позволяет установить каждому свойству осей любое из допустимых значений. Первым аргументом задается gса, а вторым и третьим — пара: 'свойство', значение.
Следующие команды задают толщину линии осей, координаты и обозначения разметки, наносят линии сетки и устанавливают цвет фона осей, совпадающий с цветом графического окна:
» set(gca, 'LineWidth', 2)
» set(gca, 'YTick', [-1 0 1]) - координаты разметки;
» set(gca, 'YTickLabel', {' y = -1'; ' y = 0'; 'y = l'}) - названия разметок;
» set(gca, 'XGrid' , 'on')
» set(gca, 'GridLines', '-')
» set(gca, 'Color', [0.8 0.8 0.8]) .
Часть названий свойств заканчивается словом Mode, например, YTickMode. Такие свойства могут иметь только два значения — ' auto' (устанавливаемое по умолчанию) или 'manual'; причем 'auto' соответствует автоматическому подбору значения свойства, в данном случае YTick. Задание вектора в YTick приводит к смене значения YTickMode с 'auto' на 'manual'. Всегда можно отменить проделанные изменения свойства YTick, установив YTickMode в 'auto'. Вышесказанное справедливо для всех свойств, имеющих сопутствующее свойство, которое заканчивается на Mode.
Среди названий свойств осей, полученных при помощи get (gca), есть Title, Xlabel, Ylabel, Zlabel. Их значения не являются текстовыми строками. Они содержат указатели на соответствующие текстовые объекты. Об использовании указателей и о текстовых объектах см. [1, глава 9, разделы "Указатели на объекты" и "Текстовые объекты"].
Свойства осей XLim, YLim, ZLim, DataAspectRatio, PlotBoxAspectRatio, отвечающие за пределы, масштаб и относительные размеры осей, взаимосвязаны. Например, относительные размеры осей зависят от пределов и масштаба, более того, при заданных DataAspectRatio, XLim, YLim и, возможно, ZLim значение свойства PlotBoxAspectRatio игнорируется.
Графические объекты MATLAB обладают большим набором свойств. Сведения по ним можно получить с помощью интерактивной справочной системы (Graphics: Handle Graphics Objects). Кроме того, быстрый доступ к назначению всех свойств графических объектов производится из браузера свойств, размещенного в разд. MATLAB: Handle Graphics Property Browser.
Использование браузера свойств графических объектов описано в [1, глава 9, разд. "Получение информации о свойствах графических объектов"].
Для обращения к текущей линии графика или поверхности в MATLAB нет специальной встроенной функции (подобной рассмотренной выше функции gca для осей). Но к ним можно обращаться как к текущим объектам. Для этого необходимо активизировать щелчком мыши в графическом окне соответствующий объект и затем вывести таблицу свойств и их значений в командное окно, используя функцию gсо:
» get(gco)
Наиболее часто употребляемые свойства линии:
Название свойства |
Описание |
Значения |
Color |
Цвет |
Вектор из трех элементов, задающий цвет в формате RGB, например, [1 l l] или один из определенных цветов: ' г', ' g' и т. д. (см.[1, приложение 1]) |
LineStyle |
Стиль линии |
'-' (по умолчанию), '- -', ':', ' - . ' или 'nоnе' |
LineWidth |
Толщина линии |
Положительное число в пунктах (1 пункт = 1/72 дюйма) |
Marker |
Тип маркера |
Одно из стандартных обозначений, например, 'о', 's' для функции plot (см. таблицу из раздела 2.5.1.1.) |
MarkerEdgeColor |
Цвет границы маркера |
Такие же, как у Color |
MarkerFaceColor |
Цвет маркера |
Такие же, как у Color
|
MarkerSize |
Размер маркера в пунктах |
Положительное число |
Примеры установок с помощью функции set:
» set(gco, 'Color', 'k')
» set(gco, 'LineWidth', 2)
» set(gco, 'Marker', 'o')
» set(gco, 'MarkerFaceColor', 'w')
» set(gco, 'MarkerSize', 8)
Функции высокоуровневой графики для построения поверхностей (mesh, surf, surf1 и др.) основаны на низкоуровневой функции surface, которая позволяет создать поверхность с любыми заданными свойствами.
Текущим объектом, используемым в функции gco, может быть не только линия или поверхность, но и оси, и графическое окно. Текущим является объект, который только что создан, или выбран щелчком мыши. Свойства не текущим объектам устанавливаются с помощью указателей [1, глава 9, раздел "Указатели на объекты"].