Графические объекты представляют собой сложные структуры, которые хранят информацию (данные и характеристики объектов), прослушивают определенные события (свойства обратного вызова) и могут вызывать изменения в других объектах, чтобы учесть их существование (обновление пределов осей и так далее). Поэтому создание объекта требует ресурсов.
Когда производительность становится важным фактором, постарайтесь реализовать свои цели таким образом, чтобы потреблять минимальное количество ресурсов.
Часто можно повысить производительность, выполнив следующие рекомендации.
Не создавать ненужные объекты
Избегайте поиска в иерархии объектов
Найдите случаи, когда можно создать меньше объектов и достичь тех же результатов. Например, предположим, что нужно вывести на график массив точек 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