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