Verfasst am: 14.02.2016, 18:02
Titel: (Abhängige) Linie in axis in plotten
Hallo Leute,
ich mache gerade meine ersten Gehversuche in der Erstellung einer GUI. - Das klappt soweit ganz prima, auch konnte ich schon erste Graphen erzeugen.
Nun habe ich eine kleine Frage. - Meine GUI besitzt ein ListBox-Element, in welchem eine Liste von Werten (Zeitpunkte) enthalten ist. In Abhängigkeit des jeweils selektierten Elements soll nun in einem axis-Element eine gerade vertikale Linie geplottet werden. - Meine Lösung, so wie ich sie bisher habe funktioniert an sich. Das Problem daran ist nur, dass pro Selektions-Event jedes Mal eine neue vertikale Linie dazugeplottet wird. ... Dabei möchte ich eigentlich, dass nur eine vertikale Linie zum jeweils aktuell selektierten Wert vorhanden ist.
Ist es irgendwie möglich Linien zu "verschieben", oder die zuvor geplottete und nun unerwünschte Linie zu "löschen"?
Meine listbox-Callback-Funktion sieht so aus:
Code:
function lb_timeselect_Callback(hObject, eventdata, handles) % hObject handle to lb_timeselect (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns lb_timeselect contents as cell array % contents{get(hObject,'Value')} returns selected item from lb_timeselect
Linie verschieben: Aktualisieren der Eigenschaften 'XData' bzw. 'YData'.
Grüße,
Harald
HansJürgenMaier85
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.02.2016, 20:09
Titel:
Hallo Harald,
danke für Deine Antwort. Prinzipiell verstehe ich sie, allerdings weiß ich nicht, wie ich das auf die mit graph2d.constantline() erzeugte vertikale Linie anwenden kann, weil das 'constantline()' nicht dokumentiert ist und ich nicht weiß, wie bzw. ob ich ihre XData-Eigenschaft ansprechen kann.
Ansonsten hätte ich mir folgendes Vorgehen gedacht: Beim Aufrufen der GUI wird eine vertikale Linie erzeugt (z.B. an der Stelle 0 auf der x-Achse); diese muss ich dann in der CallBack-Funktion der listbox ansprechen und entsprechend modifizieren ...
mlg
HansJürgen
HansJürgenMaier85
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.02.2016, 20:47
Titel:
Soo ... jetzt habe ich die Lösung selbst gefunden.
Der "Trick" ist der, dass ich zunächst beim Aufrufen der GUI eine vertikale Linie + Handle, erzeuge:
Code:
function gui_viewer_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to gui_viewer (see VARARGIN)
function lb_timeselect_Callback(hObject, eventdata, handles) % hObject handle to lb_timeselect (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns lb_timeselect contents as cell array % contents{get(hObject,'Value')} returns selected item from lb_timeselect
wenn graph2d.constantline nicht dokumentiert ist und du demnach nicht 100%ig weißt, wie es funktioniert, warum verwendest du es dann?
Geraden jeglicher Art lassen sich auch wunderbar mit
plot
erzeugen.
Grüße,
Harald
HansJürgenMaier85
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 15.02.2016, 11:21
Titel:
Hallo Harald,
da hast Du recht. - Ich habe das mit dem graph2d.constantline() noch aus einem alten Code von mir übernommen und nicht mehr darüber nachgedacht, ob es hier auch andere Möglichkeiten gibt. Aber mit plot() funktioniert es ganz gut. - Danke für den Hinweis!
Eine Frage hätte ich noch die im Prinzip dasselbe Thema betrifft, nur dass ich nun keine Linie, sondern eine komplette Funktion updaten muss.
Mit dem Skript polyfitn mache ich zu verschiedenen Zeitpunkten Datenfits mit einem von 2 Variablen abhängigen Polynom. Dieses Polynom bzw. die Gesamtrückgabe des Fits speichere ich in ein struct-Array p(ii,1) ab.
Für ii = 3 kann die Funktion an einer beliebigen Stelle [X, Y] bzw. auch über ein Feld mittels polyvaln(p(3,1),[X, Y]) ausgewertet werden.
Bisher erzeuge ich einen Plot für einen bestimmten Zeitpunkt (dbl_height ist dabei eine Höhenangabe, die ebenfalls zeitabhängig ist) folgendermaßen:
Kann hier die zu plottende Funktion p(3,1) bzw. das mesh-grid auch "einfach" durch ein Update eines surf-Handles geändert werden?
- Oder bewege ich mich hier rein gedanklich schon am falschen Dampfer?
auch surf kann aktualisiert werden, indem man XData, YData und ZData aktualisiert. Wenn ich das richtig sehe, sollte in deinem Fall eine Aktualisierung von ZData ausreichen.
Grüße,
Harald
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
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.