заданный диапазон по у и заданные метки для приращений по х. Линии существуют внутри осей и имеют заданные значения для данных по х и у. Три идентификатора объектов f, а и h сохранены для дальнейшего использования.
set и get
Свойства объекта задаются обращением к нему после его создания. Для этого используйте идентификатор, возвращаемый создаваемой функцией.
Функция set позволяет устанавливать свойства объектов, указанием идентификатора объекта и совокупности пар название свойства / значение. В качестве упражнения изменим цвет и ширину линии из предыдущего примера.
set( h , 'Color' , [0 .8 .8] , 'LineWidth' , 3)
Для того, чтобы увидеть список всех доступных свойств заданного объекта, вызовете set с идентификатором объекта.
set (h)
Color
EraseMode: [ {normal} | background | xor | none ]
LineStyle: [ {-} | — | : | -. | none ]
LineWidth
Marker: [ + | o | * | . | x | square | diamond | v | Л | > | <
pentagram | hexagram | {none} ]
MarkerSize
XData
YData
Zdata
Чтобы вывести список всех текущих установленных свойств заданного объекта, вызовете get с идентификатором объекта
get (h)
Color = [0 0.8 0.8]
EraseMode = normal
LineStyle = -
LineWidth = [3]
Marker = none
MarkerSize = [6]
XData = [ (1 by 7) double array]
YData = [ (1 by 7) double array]
ZData = []
Для запроса значения отдельного свойства используйте get с именем свойства,
get(h , 'Color')
ans =
0 0.8000 0.8000
Объекты axes имеют много детальных свойств для всего графика. Например, заголовок - title.
t = get(a, 'title');
set(t, 'String', 'Temperature', 'FontAngle', 'oblique')
Функция title обеспечивает другой интерфейс к этим же свойствам.
Графический Пользовательский Интерфейс (GUI)
Ниже приведен пример иллюстрирующий использование управляемой графики (Handle Graphics) для создания пользовательского интерфейса.
b = uicontrol( 'Style', 'pushbutton',...
'Units', 'normalized',. . .
'Position', [.5 .5 .2.1],...
'String', 'clickhere');
создает pushbutton в центре окна изображения (figure) и возвращает идентификатор нового объекта. Однако пока, нажатие на эту кнопку ни к чему не приводит.
s = ' set(b ,' 'Position'', [.8*rand .9*rand .2 .1])';
создает строку, содержащую команду, которая меняет положение кнопки. Повторное использование
eval(s)
будет передвигать кнопку в случайные места. Окончательно, set(b , 'Callback', s)
установит s в качестве обработки нажатия кнопки. Поэтому каждый раз, когда вы её нажимаете, она перемещается на новое место.
MATLAB предоставляет несколько способов для создания двигающейся, анимационной графики. Использование свойства EraseMode предназначено для длинной последовательности простых графиков, где изменение от кадра к кадру минимально. Ниже представлен пример, моделирующий броуновское движение.
Определим количество точек
n = 20;
Температуру или скорость как
s = .02;
Лучшие значения этих параметров зависят от скорости вашей машины. Сгенерируем п случайных точек с координатами (х,у) между -Уг и Уг.
х = rand(n,1)-0.5;
у = rand(n,1)-0.5;
Отобразим точки в квадрате со сторонами в пределах от -1 до 1. Сохраним идентификатор для вектора точек и установим свойство EraseMode равным хог. Это укажет графической системе MATLAB не перерисовывать весь график, когда изменяется координата одной точки, а восстанавливать цвет фона в окрестности точки, используя операцию исключающего ИЛИ.
h = plot(x , у , ' . ' );
axis([-1 1-11])
axis square
grid off
set(h , 'EraseMode' , 'xor' , 'MarkerSize' , 18 );
while 1
х = х + s*randn(n,1);
у = у + s*randn(n,1);
set(h, 'Xdata' , x , 'Ydata' , y)
end
Сколько нужно времени, чтобы одна из точек вышла за пределы квадрата? Через какое время все точки окажутся вне квадрата?
Movie
Если вы увеличиваете число точек в броуновском движении, например, п = 300, то в этом случае движение не будет очень подвижным, так как потребуется слишком много времени на каждом шаге. Становится более эффективным сохранить определенное число кадров как bitmap и проигрывать их как кино.
Во-первых, пусть число кадров
nframes = 50;
Во-вторых, установим первый график как и ранее, за исключением использования
EraseMode
х = rand(n,1)-0.5;
у = rand(n,1)-0.5;
h = plot(x, у, ' . ' )
set(h, 'MarkerSize' , 18)
axis([-1 1-11])
axis square
grid off
Теперь выделим достаточно памяти для сохранения нашего фильма.
М = moviein(nframes);
Это установит большую матрицу с nframes столбцами. Каждый столбец достаточно длинный, чтобы сохранить один кадр. Полное количество требуемой памяти пропорционально количеству кадров и области текущих осей, но она не зависит от сложности отдельных графиков. Для 50 кадров и осей по умолчанию необходимо около 7.5 мегабайт памяти. В нашем примере используются квадратные оси, которые немного
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.