Определенные свойства имеют зависимости от значения других свойств. MATLAB® автоматически вычисляет значения этих свойств и обновляет их значения на основе текущей графической модели. Например, пределы по осям влияют на значения, используемые для меток деления на оси, которые, в свою очередь, влияют на метки метки деления на оси.
Когда вы запрашиваете расчетное свойство, MATLAB выполняет неявный drawnow, чтобы гарантировать, что все значения свойств актуальны прежде, чем возвратить значение свойства. Запрос вызывает полное обновление всех зависимых свойств и обновление экрана.
MATLAB вычисляет значения определенных свойств на основе других значений, от которых зависит то свойство. Например, функции построения графика автоматически создают оси с пределами по осям, метками в виде галочки и размером, подходящим для отображенных на графике данных и размера фигуры.
Графика MATLAB выполняет полное обновление, при необходимости, прежде, чем возвратить значение из расчетного свойства гарантировать, что возвращенное значение актуально.
| Объект | Automatically Calculated Properties |
|---|---|
Оси |
|
| |
| |
| |
| |
| |
Текст |
|
Когда вы устанавливаете значения свойств, вы изменяете состояние графической модели и отмечаете его как бывший должный быть обновленными. Когда вы запрашиваете автоматически вычисленное свойство, 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 вращать метки осей, более эффективно использовать свойства XTickLabelRotation осей, YTickLabelRotation и ZTickLabelRotation.