Функции построения графика возвращают объект или объекты, созданные функцией. Например:
h = plot(1:10);
h
относится к линии, проведенной в графике значений 1 - 10.
Запись через точку является новым синтаксисом, чтобы получить доступ к свойствам объектов, запускающимся в R2014b. Этот синтаксис использует переменную объекта и чувствительное к регистру имя свойства, соединенное с точкой (.
), чтобы сформировать объектное точечное обозначение имени свойства:
объект. PropertyName
Если переменная объекта является нескалярной, используйте индексацию, чтобы относиться к отдельному объекту:
объект (n).PropertyName
Если h
является строкой, созданной функцией plot
, выражение, h.Color
является значением свойства Color
этой конкретной строки:
h.Color
ans = 0 0.4470 0.7410
Если вы присваиваете значение цвета переменной:
c = h.Color;
Переменный c
является двойным.
whos
Name Size Bytes Class c 1x3 24 double h 1x1 112 matlab.graphics.chart.primitive.Line
Можно изменить значение свойства Color
этой строки с оператором присваивания:
h.Color = [0 0 1];
Используйте ссылки свойства записи через точку в выражениях:
meanY = mean(h.YData);
Или изменить значение свойства:
h.LineWidth = h.LineWidth + 0.5;
Сошлитесь на другие объекты, содержавшиеся в свойствах с несколькими точечными ссылками:
h.Annotation.LegendInformation.IconDisplayStyle
ans = on
Установите свойства объектов, содержавшихся в свойствах:
ax = gca;
ax.Title.FontWeight = 'normal';
Графические функции могут возвратить массив объектов. Например:
y = rand(5); h = plot(y); size(h)
ans = 5 1
Доступ к строке, представляющей первый столбец в y
с помощью индекса массива:
h(1).LineStyle = '--';
Используйте функцию set
, чтобы установить LineStyle
всех строк в массиве:
set(h,'LineStyle','--')
С записью через точку можно использовать индексацию “конца”, чтобы добавить данные к свойствам, которые содержат массивы данных, такие как строка XData
и YData
. Например, этот код обновляет строку XData
и YData
вместе, чтобы вырастить строку. Необходимо гарантировать размер x-строки, и y-данные являются тем же самым прежде, чем представить с вызовом drawnow
или возвратиться к подсказке MATLAB®.
h = plot(1:10); for k = 1:5 h.XData(end + 1) = h.XData(end) + k; h.YData(end + 1) = h.YData(end) + k; drawnow end
Переменные объекта, возвращенные графическими функциями, являются указателями. Указатели являются ссылками на фактические объекты. Переменные объекта, которые являются указателями, ведут себя в особенных методах, когда скопировано и когда объект удален.
Например, создайте график с одной строкой:
h = plot(1:10);
Теперь скопируйте переменную объекта в другую переменную и установите значение свойства с новой переменной объекта:
h2 = h; h2.Color = [1,0,0]
При присвоении переменной объекта h
h2
создает копию указателя, но не объект, упомянутый переменной. Значение свойства Color
, к которому получают доступ от переменного h
, эквивалентно, который получил доступ от переменного h2
.
h.Color
ans = 1 0 0
h
и h2
относятся к тому же объекту. Копирование переменной объекта указателя не копирует объект.
Существует теперь две переменные объекта в рабочей области, которые относятся к той же строке.
whos
Name Size Bytes Class h 1x1 112 matlab.graphics.chart.primitive.Line h2 1x1 112 matlab.graphics.chart.primitive.Line
Теперь закройте фигуру, содержащую линейный график:
close gcf
Объект линии больше не существует, но переменные объекта, которые упомянули строку, действительно все еще существуют:
whos
Name Size Bytes Class h 1x1 112 matlab.graphics.chart.primitive.Line h2 1x1 112 matlab.graphics.chart.primitive.Line
Однако переменные объекта больше не действительны:
h.Color
Invalid or deleted object.
h2.Color = 'blue'
Invalid or deleted object.
Чтобы удалить переменные недопустимого объекта, используйте clear
:
clear h h2
Чтобы видеть, что содержат свойства объект, используйте функцию get
:
get(h)
MATLAB возвращает список свойств объектов и их текущей стоимости:
AlignVertexCenters: 'off' Annotation: [1x1 matlab.graphics.eventdata.Annotation] BeingDeleted: 'off' BusyAction: 'queue' ButtonDownFcn: '' Children: [] Clipping: 'on' Color: [0 0.4470 0.7410] ... LineStyle: '-' LineWidth: 0.5000 Marker: 'none' ...
Вы видите значения для свойств с перечислимым набором возможных значений с помощью функции set
:
set(h,'LineStyle')
'-' '--' ':' '-.' 'none'
Чтобы отобразить все устанавливаемые свойства включая возможные значения для свойств с перечислимым множеством значений, используйте set
с переменной объекта:
set(h)
Можно также получить доступ и изменить свойства с помощью функций get
и set
.
Базовый синтаксис для того, чтобы установить значение свойства на существующем объекте:
set(object,'PropertyName',NewPropertyValue)
Чтобы запросить текущую стоимость свойства конкретного объекта, используйте оператор формы:
returned_value = get(object,'PropertyName');
Имена свойства всегда являются векторами символов. Можно использовать одинарные кавычки или переменную, которая является вектором символа. Значения свойств зависят от конкретного свойства.
Если объектный аргумент является массивом, MATLAB устанавливает заданное значение на всех идентифицированных объектах. Например:
y = rand(5); h = plot(y);
Установите все строки на красный:
set(h,'Color','red')
Чтобы установить те же свойства в ряде объектов, задайте имена свойства и значения свойств с помощью массива структур или массива ячеек. Например, задайте структуру, чтобы установить свойства осей соответственно отображать конкретный график:
view1.CameraViewAngleMode = 'manual'; view1.DataAspectRatio = [1 1 1]; view1.Projection = 'Perspective';
Чтобы установить эти значения на текущей системе координат, введите:
set(gca,view1)
Можно задать массив ячеек имен свойства и использовать его, чтобы получить значения для тех свойств. Например, предположите, что вы хотите запросить значения свойств “режима камеры” осей. Во-первых, задайте массив ячеек:
camModes = {'CameraPositionMode','CameraTargetMode',... 'CameraUpVectorMode','CameraViewAngleMode'};
Используйте этот массив ячеек в качестве аргумента, чтобы получить текущую стоимость этих свойств:
get(gca,camModes)
ans = 'auto' 'auto' 'auto' 'auto'