plot legend -> bad performance
22 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi!
I have a GUI with four axes-objects showing line plots, which I'd like to update about ten times per second. Every line has a 'DisplayName' property, so that I can draw the legends using
legend(handles.axes1,'show');
legend(handles.axes2,'show');
legend(handles.axes3,'show');
legend(handles.axes4,'show');
Everything works fine, as long as I don't use legends. But as soon as I draw the legends, performance gets sigificantly worse. My anaylsis using tic/toc shows that the whole plotting procedure without legends takes about 35ms, but the four legend commands shown above take about 160ms.
Does anybody have an idea why the legend command is so slow and how it can be accelerated?
5 commentaires
dpb
le 9 Oct 2013
Modifié(e) : dpb
le 9 Oct 2013
Well, that would simply be keeping a counter modulo some N. But again, why would you redraw it every time; that wouldn't help?
Perhaps I don't understand what you're changing at such a frequency--the UI certainly can't be being stroked by a user at 10 Hz...actually, there's no "perhaps" here, it isn't at all clear to me from your description what's actually changing on the legend that means it needs updating so frequently.
I can envision every so often the user puts a different piece of data on a given axis, but it would seem that once that happens and the legends are updated to match they would be static until the next time they're changed?
Réponses (2)
Yair Altman
le 9 Oct 2013
The legend is automatically connected to the axes so that whenever the axes children change (as in deleting/adding plot lines), the legend gets redrawn and this is quite a time-consuming operation.
You could do 2 things that are directly related to legend performance:
- Make the legend static so that it does not get updated when you update the axes. See http://undocumentedmatlab.com/blog/plot-performance/
- Do not delete/add lines but rather update the existing plot lines' properties (specifically their XData and YData). This will significantly improve performance even if you do not show a legend. But when you have a legend it helps by not forcing the legend to redraw.
There are other suggestions to improve plotting performance, but they do not directly relate to the legend.
Voir également
Catégories
En savoir plus sur Legend dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!