WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Performance bei Plots mit vielen text und line Elementen

 

schwarzbaer
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.09.11
Wohnort: ---
Version: 2011a win64 (7.12)
     Beitrag Verfasst am: 29.12.2011, 11:41     Titel: Performance bei Plots mit vielen text und line Elementen
  Antworten mit Zitat      
Hey Leute,

ich hab ein kleines Performance Problem in meiner GUI.

ich plotte nen Haufen line und text Elemente. Wenn ich eins der beiden auskommentiere gehts super fix, aber beide zusammen ist einfach grausam. Hier ein Beispiel Code:

Code:

tic
figure;
set(gca,'xlim',[0 100])
set(gca,'ylim',[0 100])
for i = 1:1000
    line([0 100],[i i])
    text(randi(100,1),randi(100,1),sprintf('%d',i))
end
toc


kommentiert man entweder line oder text aus, gehts in ~0.15 sekunden.
mit beiden Zeilen benötigt der Code ~6 Sekunden?!
In meiner GUI wartet man dann schonmal 20s auf den Plot, was extrem nervig werden kann Wink

Wäre super, wenn jemand eine Idee hat.

Was ich schon probiert habe bzw schon etwas geholfen hat:
- http://www.mathworks.de/help/techdoc/creating_plots/f7-60415.html
- mit parent die axis handle übergeben
- text interpreter auf none gestellt.
- min max x/y lim vorher festlegen.

Danke schonmal Smile
Michi

Zuletzt bearbeitet von schwarzbaer am 29.12.2011, 12:10, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


schwarzbaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.09.11
Wohnort: ---
Version: 2011a win64 (7.12)
     Beitrag Verfasst am: 29.12.2011, 11:43     Titel:
  Antworten mit Zitat      
habe einen ersten Workaround gefunden:

Code:
tic
figure;
set(gca,'xlim',[0 100])
set(gca,'ylim',[0 100])
for i = 1:1000
    line([0 100],[i i])  
end
for i = 1:1000
    text(randi(100,1),randi(100,1),sprintf('%d',i))
end
toc


in ~0.3 sec.

Aber warum??? ^^

Gibt es noch eine Möglichkeit damit ich jetzt nicht alles umstellen muss?

Vielen Dank Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.12.2011, 13:37     Titel:
  Antworten mit Zitat      
Hallo schwarzbaer,

Ein sehr interessantes Phänomen!
Wenn man statt 1000 Objekten nur 500 zeichnet, benötigt man etwa ein Viertel der Zeit. Dieses nicht-lineare Laufzeitverhalten ist ein starkes Indiz dafür, dass beim Zeichnen eines neuen Objektes alle bereits existierenden Objekte einen Einfluß haben. Wieso das allerdings bei zwei getrennten Schleifen nicht mehr der Fall ist, bleibt mir unklar.

Ein Workaround:
Code:
tic
figure;
set(gca,'xlim',[0 100])
set(gca,'ylim',[0 100])
for i = 1:1000
    line([0 100],[i i], 'EraseMode', 'none');  
    text(randi(100,1),randi(100,1), sprintf('%d',i));
end
toc

Ich würde noch alle Handles der LINE-Objekte speichern und hinterher den EraseMode wieder auf 'normal' stellen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
schwarzbaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.09.11
Wohnort: ---
Version: 2011a win64 (7.12)
     Beitrag Verfasst am: 29.12.2011, 14:47     Titel:
  Antworten mit Zitat      
Hey Jan,

danke schonmal! Die handles halte ich eh schon fest. Echt komisch dass der EraseMode das plot verhalten ändert.
Im Beispiel klappts wunderbar, aber in meiner GUI zeichnet er jetzt jede Linie/Text sofort, als würd ich drawnow nutzen.

Dadurch läuft der Code jetzt etwas langsamer im Vergleich zu 2 getrennten Schleifen (habs inzwischen doch umgeschrieben).

Aber trotzdem schon enormer Boost!

Hat noch jemand Ideen?
Private Nachricht senden Benutzer-Profile anzeigen
 
schwarzbaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.09.11
Wohnort: ---
Version: 2011a win64 (7.12)
     Beitrag Verfasst am: 03.01.2012, 13:58     Titel:
  Antworten mit Zitat      
Hab das Ganze mal noch bei MatLab Answers gepostet:

http://www.mathworks.de/matlabcentr.....le-line-and-text-elements

aber fürchte gibt keine wirkliche lösung bisher.

cu
Michi
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.