Определенные свойства имеют зависимости от значения других свойств. MATLAB® автоматически вычисляет значения этих свойств и обновляет их значения на основе текущей графической модели. Например, пределы по осям влияют на значения, используемые для меток деления на оси, которые, в свою очередь, влияют на метки метки деления на оси.
Когда вы запрашиваете расчетное свойство, MATLAB выполняет неявное drawnow
чтобы гарантировать все значения свойств актуальны прежде, чем возвратить значение свойства. Запрос вызывает полное обновление всех зависимых свойств и обновление экрана.
MATLAB вычисляет значения определенных свойств на основе других значений, от которых зависит то свойство. Например, функции построения графика автоматически создают оси с пределами по осям, метками в виде галочки и размером, подходящим для отображенных на графике данных и размера фигуры.
Графика MATLAB выполняет полное обновление, при необходимости, прежде, чем возвратить значение из расчетного свойства гарантировать, что возвращенное значение актуально.
Эта таблица приводит некоторые чаще всего расчетные свойства.
Объект | Свойства | Когда MATLAB Вычисляет эти Свойства |
---|---|---|
Оси |
| Всегда |
| Всегда | |
| Всегда | |
| Всегда | |
| Всегда | |
| Всегда | |
Текст |
| Всегда |
| Только, когда текстовый объект используется в качестве заголовка осей или подписи по осям | |
| Только, когда текстовый объект используется в качестве заголовка осей или подписи по осям |
Когда вы устанавливаете значения свойств, вы изменяете состояние графической модели и отмечаете его как бывший должный быть обновленными. Когда вы запрашиваете автоматически вычисленное свойство, MATLAB должен выполнить обновление, если графическая модель и аппаратное обеспечение машинной графики не находятся в синхронизации.
Когда вы получаете и устанавливаете свойства в том же цикле, можно создать ситуацию, где обновления выполняются с каждой передачей через цикл.
get
вызывает обновление.
set
отмечает графическую модель как необходимость в обновлении.
Цикл повторяется с каждым, проходят через цикл. Лучше выполнить все запросы свойства в одном цикле, затем выполнить все наборы свойств в другом цикле, как показано в следующем примере.
Этот пример получает и устанавливает текст Extent
свойство.
Код с низкой производительностью | Код с лучшей эффективностью |
---|---|
h = gobjects(1,500); p = zeros(500,3); for ix = 1:500 h(ix) = text(ix/500,ix/500,num2str(ix)); end drawnow % Gets and sets in the same loop, % prompting a full update at each pass for ix = 1:500 pos = get(h(ix),'Position'); ext = get(h(ix),'Extent'); p(ix,:) = [pos(1)+(ext(3)+ext(1)), ... pos(2)+ext(2)+ext(4),0]; set(h(ix),'Position',p(ix,:)) end drawnow | h = gobjects(1,500); p = zeros(500,3); for ix = 1:500 h(ix) = text(ix/500,ix/500,num2str(ix)); end drawnow % Get and save property values for ix=1:500 pos = get(h(ix),'Position'); ext = get(h(ix),'Extent'); p(ix,:) = [pos(1)+(ext(3)+ext(1)), ... pos(2)+ext(2)+ext(4),0]; end % Set the property values and % call a drawnow after the loop for ix=1:500 set(h(ix),'Position',p(ix,:)); end drawnow |
Этот код выполняет плохо потому что:
| Эффективность лучше потому что этот код:
|
Extent
вращать меткиВ случаях, где вы изменяете текст Extent
свойство вращать метки осей, более эффективно использовать свойства XTickLabelRotation
осей,
YTickLabelRotation
, и ZTickLabelRotation
.