|
Martinuk |

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 07:28
Titel: Figure(s) - Plot updaten
|
 |
|
 |
|
Hallo,
ich arbeite gerade an einer Matlab-GUI, meine Frage bezieht sich allerdings mehr auf das Thema Figures + Plots weshalb ich es hier poste.
Folgende Situation:
Ich habe bei meiner GUI ein PopUpMenü mit 3 Einträgen.
zB.
PopupMenü Eintrag 1: X
PopupMenü Eintrag 1: Y
PopupMenü Eintrag 1: Z
Je nachdem ob X,Y,Z ausgewählt ist soll ein anderer Datensatz geplottet werden.
Unabhängig vom Datensatz öffne ich immer wenn ich plotte 4x Figures mit jeweils 2 Subplots.
Nun zu meiner Frage.
Angenommen ich habe die genannten 4x Figures mit den jeweiligen 2 Subplots geöffnet und geplottet wurde der X Datensatz.
Jetzt stelle wähle ich im PopupMenü den Eintrag Z und möchte jetzt die Daten sofort aktualisieren ohne das die Figures und folglich die Suplots neu erstellt werden. Praktisch sollen die einzelnen Subplots nur aktualisiert werden, weil die Figures sind ja bereits geöffnet.
1. Wie stelle ich das am elegantesten an. Mein Ansatz wäre sowas wie
a. Subplots löschen (mit cla(h(x)) wobei h(x) dem handle eines Subplots entspricht)
b. Figure in einer Schleife immer als Current Figure set(0,'CurrentFigure', fig(x)) setzen und Subplots neu plotten
Bisher nehme ich an, dass bei der Aktualisierung alle Figure geöffnet sind. Was aber wenn man zB. versehentlich ein Figure geschlossen wurde und ich jetzt den Datensatz erneut aktualisieren möchte (jetzt möchte ich Y plotten). In einem solchen Fall muss meiner Meinung geprüft werden welches Figure geschlossen ist, denn dieses muss bei der Aktualisierung zwangsläufig neu erstellt werden.
Ich hoffe meine Beschreibung ist einigermaßen verständlich, ansonsten bitte einfach nachfragen.
Freue mich über jede konstruktive Antwort.
mfg
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 09:31
Titel: Re: Figure(s) - Plot updaten
|
 |
Hallo Martinuk,
Das Programm könnte sich eine Liste der Handles der geöffneten Figures merken und beim Neu-Zeichnen zunächst per ISHANDLE prüfen, ob die Figure noch existiert. Falls ja, kann man darin die entsprechende AXES suchen (z.B. per FINDOBJ und einem eindeutigen Tag) oder den Handle in den UserData oder ApplicationData (siege GUIDATA) speichern. Nun kann man die bisherigen Objekte in der AXES löschen ("delete(get(AxesHandle, 'Children'))") oder was noch effizienter wäre, nur die XData und YData der vorhandenen Objekte anpassen.
Zum Neu-Zeichnen muss die Figure nicht in den Vordergrund gebracht werden, wenn man das "Parent"-Objekt in jedem PLOT-Befehl definiert.
Da es sehr viele unterschiedliche Methoden gibt, dies zu implementieren, bleibe ich hier zunächst ewtas vage.
Gruß, Jan
|
|
|
Martinuk |
Themenstarter

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 15:17
Titel:
|
 |
Danke Jan für die rasche Antwort.
Wäre es für dich ein großer Aufwand mir vllt. einen Codeschnipsel zur Verfügung zu stellen welcher deines Erachtens mein Vorhaben elegant lösen würde.
Mit 'Parent' oder 'Children' bin ich aktuell nämlich nicht so vertraut. Und was du mit XData und YData anpassen genau meinst ist mir auch nicht ganz klar um ehrlich zu sein. Mit dem Befehl (cla(...)) hat das nichts zu tun oder?
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 17:25
Titel:
|
 |
Hallo Martinuk,
Alle Grafik-Objekte haben einen Parent und können mehrere Children haben. Das Basis-Objekt hat den Handle 0 und die Eigenschaften kannst Du per "get(0)" anschauen. Alle FIGUREs sind Children des 0-Handles. Deshalb ist 0 der Parent aller FIGUREs.
Jede Figure kann nun UICONTROLs, AXES, UIPANELs, UIMENUs etc. beinhalten, dies sind also wieder die Children.
Alle Elemente, die in ein AXES gezeichnet wurden, kann man so löschen:
CLA macht etwas ähnliches, schaue einfach mal rein: "edit cla".
XData und YData anpassen ist knuffig:
Nun muss nicht mehr die Linie neu erzeugt werden, sondern es werden nur die Koordinaten erneuert. Das spart eine Menge Overhead-Zeit.
Gruß, Jan
|
|
|
Martinuk |
Themenstarter

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 19:49
Titel:
|
 |
Hallo Jan,
danke für den Code. Jetzt ist mir das mit 'Parents' und 'Children' schon etwas klarer.
Allerdings verstehe ich nicht ganz den Vorteil den Plot in einer Schleife abzuwickeln. Praktisch wird der Graph/Kurve Punkt für Punkt erstellt.
Würde es nicht reichen es etwa so abzuwickeln?
Schöne Grüße
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 21:18
Titel:
|
 |
Hallo Martinuk,
Ja, reichen würde dies. Das Setzen des CurrentAxes-Objekts ist aber langsamer und fehleranfälliger als das Definieren des Parent-Objekts im PLOT Befehl. Die CurrentAxes lönnte z.B. zwischen den Befehlen unerwartet von einem TIMER-Callback geändert werden.
Das Ändern der XData ist zudem schneller. Das mag in Deinem Beipiel nicht wichtig sein, wenn man aber z.B. einen film mit 10.000 Bildern erstellen möchte, ist es schon praktisch, wenn es dreimal so schnell geht.
Gruß, Jan
|
|
|
Martinuk |
Themenstarter

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.06.2012, 15:31
Titel:
|
 |
Hallo Jan,
danke für die Beschreibung. Jetzt macht es mehr Sinn. Momentan habe ich wieder weniger Zeit für meine GUI, Simulink steht auf dem Fahrplan.
Wenn ich wieder an der GUI arbeite werde ich deine Posts berücksichtigen und dich wissen lassen wenns was neues gibt.
Vielen Dank.
|
|
|
Martinuk |
Themenstarter

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.06.2012, 05:49
Titel:
|
 |
Hallo Jan,
hab mich heute mal mit deinem Codeschnipsel beschäftigt. Dein Bsp. benutzt einen Plot-Befehl. Meine Figures haben jeweils 2 Subplots. Bei Subplots wird XData und YData nicht angeboten als Eigenschaft.
Hast du eine Idee wie ich es für Subplots lösen könnte?
mfg
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.06.2012, 15:13
Titel:
|
 |
Hallo Martinuk,
SUBPLOT erstellt ein AXES-Objekt an einer bestimmten Stelle im FIGURE-Window. Hier wären XData und YData nicht hilfreich. Dazu benötigst Du schon ein LINE, PATCH oder SURF-Objekt. Man muss also das Objekt einmal zeichnen und kann danach in den folgenden Iterationen die XData anpassen. Das erstmalige Zeichnen kann auch leere Daten enthalten, z.B. "plot([])".
Gruß, Jan
|
|
|
Martinuk |
Themenstarter

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 18.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 20:01
Titel:
|
 |
Hallo Jan,
wollte dich nur wissen lassen, dass nun alles so funktioniert wie ich es mir vorgestellt habe. Deine Beiträge waren wirklich hilfreich. Vielen Dank nochmal dafür.
Schöne Grüße
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|