Графические объекты являются сложными структурами, которые хранят информацию (данные и характеристики объекта), слушают, когда происходят определенные события (коллбэки), и могут вызвать изменения других объектов, чтобы приспособить их существование (обновление до пределов осей и так далее). Поэтому создание объекта потребляет ресурсы.
Когда эффективность становится важным фактором, постарайтесь реализовать свои цели таким образом, чтобы потреблять минимальное количество ресурсов.
Вы часто можете улучшить эффективность, следуя этим рекомендациям:
Не создавать ненужные объекты
Избегайте поиска иерархии объектов
Ищите случаи, когда можно создать меньше объектов и достичь тех же результатов. Например, предположим, что вы хотите построить график массива точек 10 на 1000, показывающий только маркеры.
Этот код создает 1000 линии:
x = rand(10,1000); y = rand(10,1000); plot(x,y,'LineStyle','none','Marker','.','Color','b');
Преобразуйте данные из 10 на 1000 в 10000 на 1. Этот код создаёт график, который выглядит одинаково, но создает только один объект:
plot(x(:),y(:),'LineStyle','none','Marker','.','Color','b')
Если координатные данные содержат NaNs, MATLAB® не отображает эти точки. Можно добавить NaNs к данным вершин, чтобы создать сегменты линий, которые выглядят как отдельные линии. Поместите NaNs в одинаковые положения элемента в каждом векторе данных. Для примера этот код, по-видимому, создает трёх отдельных линий:
x = [0:10,NaN,20:30,NaN,40:50]; y = [0:10,NaN,0:10,NaN,0:10]; line(x,y)
Чтобы просмотреть различные данные о том, что в основном является одним и тем же графом, более эффективно обновлять данные существующих объектов (линии, текст и т.д.), чем воссоздавать весь график.
Например, предположим, что вы хотите визуализировать эффект на ваши данные меняющихся определенных параметров.
Установите пределы любой оси, которые могут быть определены заранее, или установите режимы пределов по осям равными manual
.
Пересчитайте данные с помощью новых параметров.
Используйте новые данные для обновления свойств данных линий, текста и т.д., используемых в графике.
Звонить drawnow
для обновления рисунка (и всех дочерних объектов на рисунке).
Например, предположим, что вы хотите обновить график по мере изменения данных:
figure z = peaks; h = surf(z); drawnow zlim([min(z(:)), max(z(:))]); for k = 1:50 h.ZData = (0.01+sin(2*pi*k/20)*z); drawnow end