Copyright © Красноярский государственный университет 2003
Графические объекты Как нарисовать несколько графиков в одном графическом окне Вывод текста в графическое окно Трехмерная графика Создание avi-файлов ЗадачиГрафические объекты
Я уже показал в первой лекции как строятся двумерные и трехмерные кривые. Функция figure создает объект графическое окно. Например, команда figure(1) создает в памяти объект "графическое окно" и отображает объект на экране с подписью в верхней части окна "Figure No. 1". Если окно с таким именем уже существовало, то оно получает фокус ввода и становится активным. Вообще говоря, вызов функции figure перед началом процесса рисования необязателен. Любые функции для рисования, такие как plot или plot3, автоматически открывают графическое окно перед началом рисования. Если окно уже было открыто, то рисование выполняется в последнем открытом окне. Выполним программу l2_1.m. clear all %чистим память hf=figure(1); %открываем графическое окно. x=0.1:pi/100:2*pi; % заполняем массивы x и y y=cos(x).*log(x); hp=plot(x,y); %рисуем график y(x) На рис. 2.1 показана оболочка Matlab и результат работы программы l2_1.m.Рис. 2.1 Весь рисунок с именем "Figure No.1" состоит из трех объектов - графического окна, осей координат и самого графика. Все три объекта хранятся в памяти. Каждый обект имеет поля данных, которые определяют его вид на экране. Для получения доступа к полям графических объектов необходимо иметь указатели на эти объекты. Во второй строке программы l2_1.m в переменную hf записывается указатель на графическое окно. В пятой строке в переменную hp записывается указатель на график. Указатель на оси координат можно получить с помощью функции gca (от английских get current axis). Получить указатель на текущее графическое окно можно командой gcf (от английских get current figure). Имея указатели на графические объекты можно изменять значения полей объектов и соответственно их вид на экране. Чтобы узнать какие поля объекта hf (в программе l2_1.m это указатель на графическое окно) можно изменять, введем в командном окне set(hf). Команда set при таком вызове выведет на консоль все поля объекта hf и их возможные стандартные значения. На рис. 2.2 показан фрагмент консоли Matlab после выполнения команды.
![]()
Рис. 2.2 Поля объекта hf и их возможные стандартные значенияЕсли некоторое поле объекта может принимать только стандартный набор значений,эти значения указаны справа от двоеточия после имени поля. Значение по умолчанию заключено в фигурные скобки. Например после поля visible указаны два возможных значения - 'on' и 'off'. По умолчанию поле имеет значение 'on' - объект виден наэкране. Если этому полю присвоить значение 'off' с помощью командыset(hf,'visible','off'), обект исчезнет с экрана.Команда set нечувствительна к регистру, которым набирается имя поля.Например, команда set(hf,'Visible','off') полностью эквивалентнакоманде set(hf,'VISIBLE','off') и команде set(hf,'visible','off').После имени поля Color в списке полей объекта hf никаких стандартных значенийне указано. Цвет в matlab всегда формируется с помощью вектор-строки из трех чисел,определяющих интенсивности красного, зеленого и синего цветов в результирующем цвете.Интенсивности базовых изменяются в пределах от нуля до единицы. Например,если необходимо задать красный цвет для объекта hf нужно ввести командуset(hf,'color',[1 0 0]). Первое число в векторе-строке [1 0 0] определяет интенсивностькрасного цвета, второе - зеленого и третье - синего.Поле units определяет в каких единицах задается положение и размеры видимогоокна на экране. По умолчанию положение окна и размеры задаются в пикселях (светящихсяточках на экране). <I>Начало координат на экране всегда располагается в левомнижнем углу. Ось x-ов направлена слева направо, ось y-ов снизу вверх. </I>Использование пикселей, сантиметров или дюймов для определения размеров ии позиции окна на экране делает график зависящим от разрешения экрана,что совершенно неудобно при разработке графических интерфейсов,которые должны выглядеть одинаково при любом разрешении монитора.Поле units может принимать значение 'normalized'. При таком значении поляunits ширина и высота экрана принимаются равными по единице, а точка 0,0находится в левом нижнем углу экрана. Например, чтобы поместить графическоеокно hf в левый нижний угол экрана и задать ширину и высоту по 1/2 нужноввести команду set(hf,'units','normalized','position',[0 0 0.5 0.5]);.Значение поля 'position' определяется вектор-строкой из четырех чисел.Первые два числа определяют x и y координаты левого нижнего угла окна,а вторые два числа определяют ширину и высоту.Поле InvertHardCopy будут ли инвертироваться цвета при выводе на принтер.Поле PaperPosition определяет положение и размер графика при выводе на принтер.<I> Чтобы получить текущее значение какого либо поля объекта, можно воспользоватьсякомандой get. Например, посмотреть значение поля 'visible' объекта hf можнокомандой get(hf,'visible'), а посмотреть значения всех полей - get(hf);.</I>Рассмотрим теперь поля объекта оси координат. Чтобы получить указательна текущие оси координат используем функцию gca. Вводим в командном окне set(gca). Список полей объекта gca показан на рис. 2.3.![]()
![]()
![]()
Рис. 2.3 Список полей объекта gca В следующей таблице приводится описание некоторых полей для осей координат.
Назначение значений для полей производится функцией set, а для получения значений полей используется функция get. Несколько примеров: set(gca,'box','off'); set(gca,'units','normalized'); set(gca,'position',[0 0 0.5 0.5]); set(gca,'xtick',[0.1 0.3 0.5 0.7 0.9]);. В строке пятой программы l2_1.m в переменную hp был занесен указатель на график. Посмотреть все поля объекта hp можно командой set(hp). Некоторые поля из полного списка.
Поле Назначение Box Определяет обведена ли область осей рамкой или нет. Чтобы отменить рамку надо ввести команду set(gca,'box','off');. Color Цвет. Fontname Имя шрифта. FontUnits Единицы измерения размера шрифта. FontSize Размер шрифта. Position Расположение и размер осей координат в графическом окне в единицах,
определяемых значением поля Units. Значение поля задается вектор-строкой из четырех чисел [x y w h]. x,y - координаты левого нижнего
угла осей координат в окне. Точка 0,0 находится в левом нижнем углу
окна. w,h - ширина и высота осей координат.
Units Единицы измерения для поля Position. Если полю Units присвоить значение
Normalized при помощи команды set(gca,'units','normalized');, тогда при любом размере графического окна на экране считается, что координаты левого нижнего угла - 0,0 , а правого верхнего 1,1.
NextPlot Имеет два значения - add и replace. Значение add означает, что следующий
график будет наложен на предыдущий. Значение replace означает, что
следующий график заменит предыдущий.
TickDir Значения in и out определяют направление штрихов на осях координат. Xdir Значения normal и reverse определяют направление оси x. XGrid Два значения on и off определяют наличие или отсутствие линий, проведенных через штрихи на оси x-ов параллельно оси y-ов. XLim Пределы по оси x-ов. XScale Значения linear и log определяют линейный или логарифмический масштаб. XTick Определяет через какие точки на оси x-ов прведены штрихи. Задается вектором произвольной длины. Например set(gca,'XTick',[0 0.2 0.4 0.6 1]);.
Поле Описание Color Цвет графика. Определяется вектором из трех значений. Например, команда set(hp,'color',[0 0 1]); назначает объекту hp синий цвет. LineStyle Определяет маркер, которым рисуется график. Возможные значения [ {-} | -- | : | -. | none ] LineWidth Ширина линии. MarkerSize Размер маркера для отрисовки. Ydata y - массив для отрисовки графика. Например, команда set(hp,'ydata',y1); назначает новые y-данные для графика hp. Массив y1 должен иметь такой же размер, как и массив в Xdata. Xdata x - массив для отрисовки графика. Как нарисовать несколько графиков в одном графическом окне
Для решения задачи необходимо создать одно графическое окно, два объекта axes (оси координат) с полями position, определяющими положение осей в графическом окне, и затем в каждых осях построить график. Пример содержится в файле l2_2.m . clear all hf=figure('numbertitle','off','visible','off'); %создаем объет графическое окно set(hf,'name','two graphics'); %присваиваем имя объекту hf h1=axes; %создаем два объекта оси координат h2=axes; set(h1,'units','normalized'); %положения осей измеряется в нормализованных единицах set(h2,'units','normalized'); set(h1,'position',[0.1 0.1 0.8 0.4]); %задаем положения и размеры осей set(h2,'position',[0.1 0.6 0.8 0.4]); x1=0:0.1:6; y1=cos(x1.^2); x2=0:0.1:6; y2=sin(x1.^2); set(hf,'currentaxes',h1); %назначаем оси h1 текущими осями координат для окна hf hp1=plot(x1,y1); %рисуем график в осях h1 set(hf,'currentaxes',h2); %назначаем оси h2 текущими осями координат для окна hf hp2=plot(x2,y2); %рисуем график в осях h2 set(hf,'visible','on'); %делаем окно hf видимым Имеется и другой вариант решения рассматриваемой задачи. Можно использовать функцию subplot, которая разбивает текущее графическое окно на несколько подокон одинакого размера. Например, чтобы разбить текущее графическое окно на четыре нужно ввести команду subplot(2,2). Геометрия и нумерация созданных окон показана на рисунке.
1 | 2 |
3 | 4 |
Для отрисовки графика в третьем окне нужно ввести команду пару команд.
hp1=subplot(2,2,3);
plot(x,y);
Для вывода текста в графическом окне обычно используется функция gtext, позволяющая
с помощью мышки поставить текст в нужную позицию. Ввведем команду ht = gtext('my grafik');.
Вслед за этим необходимо переместить мышь в поле графического окна и
нажатием левой кнопки указать положение текста. После этого текст появится на экране
в указанной позиции. Графический текст является графическим объектом со своими
полями данных. Чтобы просмотреть все поля объекта и их возможные стандартные значения
нужно иметь указатель на графический объект
(в нашем случае указатель хранится в переменной ht) и воспользоваться командой set.
Например, set(ht);. В следующей таблице приводятся некоторые поля и их описание.
Поле | Описание |
color | Задает цвет текста. Например, чтобы задать зеленый цвет нужно ввести команду set(ht,'color',[0 1 0]);. |
fontname | Определяет имя шрифта. |
fontunits | Определяет единицы измерения размера шрифта. Возможны значения [ inches | centimeters | normalized | {points} | pixels ]. |
fontsize | Определяет размер шрифта в единицах, определенных полем fontunits. |
units | Единицы для измерения поля position. Возможные значения [ inches | centimeters | normalized | points | pixels | characters | {data} ]. По умолчанию поле units имеет значение data, что означает что поле position определяет положение текста на экране в единицах, нанесенных на осях координат. |
position | Задает положение текста в графическом окне в единицах, определенных полем units. Поле задается вектор-строкой из трех чисел [x y z]. Если график двумерный, координата z=0. Например, set(ht,'position',[ 1 0.5 0]);.
|
rotation | Определяет поворорт текста в градусах. Например, команда set(ht,'rotation',45); поворачивает текст ht на 45 градусов. |
backgroundcolor | Определяет цвет фона. Например, пурпурный фон текста можно задать командой set(ht,'backgroundcolor',[1 0 1]);. |
string | Строка текста. Например, set(ht,'string','new stping');. |
visible | Определяет виден ли текст на экране. Возможные значения 'on' и 'off'. Например, чтобы сделать текст ht невидимым нужно ввестикоманду set(ht,'visible','off');. |
В файле settxt.m приведен пример функции, которая позволяет с помощью мышки переместить текст в любое место на графическом окне. Для вызова этой функции достаточно ввести в командном окне команду settxt(ht); и указать нажатием левой кнопки мыши новое положение для текста. Функция завершает работу при нажатии правой или средней кнопок мыши. Вот текст этой функции.
function settxt(ht)
but=1;
while but==1
[xi yi but]=ginput(1);
set(ht,'position',[xi yi]);
end
Функция settxt получает один аргумент. При вызове функции это должен быть указатель
на объект, который необходимо переместить в новую позицию. Цикл while всегда заканчивается
оператором end. В нашем случае цикл while работает до тех пор пока переменная but имеет
значение единица. Функция ginput с аргументом 1 останавливает работу цикла и ожидает
ввода мыши в поле графического окна и однократного нажатия (аргумент 1) любой из
кнопок мыши. После этого она возвращает координаты xi и yi, где была нажата кнопка и
номер нажатой кнопки в переменную but. Левая кнопка соответствует but=1, средняя but=2
и правая but=3.
previous next home