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

Plot aktualisieren mit Xdata, Ydata, das passende Handle daz

 

rony

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2017, 13:21     Titel: Plot aktualisieren mit Xdata, Ydata, das passende Handle daz
  Antworten mit Zitat      
Ich habe eine GUI mit GUIDE erstellt. Sobald die Gui geöffnet wird, wird in der Opening Function direkt etwas in zwei verschiedene Achsen geplotet.

Ich habe also Axes1 und Axes2. Wenn ich dann aber in einem anderem Callback in der Axes2 plotten will habe ich bis jetzt so gemacht:
Code:
axes(handles.Axes1);
plot(x,y);


Ich will aber nicht immer wieder den Plot Befehl neu ausfhren sondenr Xdata und ydata aktualisieren. Wie kriege ich die Handles dazu?
wenn ich
Zitat:
axes(handles.Axes1);
handleAaxes1 = plot(x,y)
ausführe, habe ich ja das handle und kann dann mit
Zitat:
set(handleAaxes1 ,'XData', x ,'YData', y);
den Plot aktualisieren.
Aber wenn ich nun in einem anderem Callback bin, geht das nicht mit mit ]set(handleAaxes1 ,'XData', x ,'YData', y

Und zuvor mit setapdata das handleAxes1 speichern und in dem neuen Callback reinladen mit getappdata, bringt nichts es ist ein leeres handle.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2017, 13:26     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Daten übergeben, z.B. indem du sie an die Handles-Struktur hängst.
Code:
handles.p1 = plot(x,y)
guidata(hObject, handles)


Mehr Möglichkeiten siehe hier:
https://www.mathworks.com/help/matl.....data-among-callbacks.html

Zitat:
Und zuvor mit setapdata das handleAxes1 speichern und in dem neuen Callback reinladen mit getappdata, bringt nichts es ist ein leeres handle.

Sollte an sich. Bitte ein reproduzierbares Beispiel dazu.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rony

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2017, 14:57     Titel:
  Antworten mit Zitat      
Opening Function:
Code:

axes(handles.Axes1);
 Axes1Handle =  plot(t, y); % Das ist nun das Handle.

setappdata(handles.figure1,'Axes1Handle',xes1Handle); % Dieses handle übergebe ich.


Pusbutton_Callback:
Code:

Axes1Handle = getappdata(handles.figure1,'Axes1Handle'); %in einem weiteren Callback lade ich das handle. Hier steht dann in der Variable 'Handle to deleted Line'

 set(Axes1Handle,'XData',t2, 'YData', y2) % und versuche hier nun die Daten zu aktualisieren


Das ist also der eigentliche Ablauf, und das funktioniert an dem laden des handles nicht.

Mache ich einfach neuen plot also im Pushbutton callback:

Zitat:
axes(handles.Axes1);
plot(t2,y2);
das funktioniert, aber ich wollte lieber die Daten updaten als neuen Plot.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2017, 15:03     Titel:
  Antworten mit Zitat      
Hallo,

sieht bis auf den Tippfehler (A fehlt bei xes1Handle) gut aus. Vielleicht gibt es hier noch ein anderes Problem.

Poste doch bitte ein reproduzierbares Beispiel. Sicher kann ich mir ein Beispiel basteln und das da reinkopieren. Wozu aber, wenn du so ein Beispiel ja schon hast?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rony

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2017, 19:35     Titel:
  Antworten mit Zitat      
Ich habe jetzt ein neues GUI erstellt mit 2 Axes und einem Figure, und da funktioniert es.

Aber in meinem Programm klappt das ganze nicht, ich verstehe nicht warum. Ich habe genauso im opening funktion sachen die gebe ich dann mit setappdata rüber und in einem beliebigen Callback holle ich das mit getappdata, nur steht dann in der variable folgendes:

Axes1Handle: 1x1 matlab.graphics.chart.primitive.Line = handle to deleted Line.

woran liegt das?
 
rony

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2017, 19:53     Titel:
  Antworten mit Zitat      
Ich habs jetzt Embarassed Das passiert ja in der Opening Funktion. Somit muss ihc zuerst die Gui schließen und öffnen damit das handle dort weitergegeben wird. Jetzt funktioniert es.

Aber allerdings noch nicht ganz so wie es soll. Beim ersten start funktioniert alles also wenn ich Pusbutton klicke kann ch xdata und ydata ändern. So, wenn ich wieder in einem anderne Callback mit getappdata das handle laden will um wieder xdata und ydata zu ändern wird es wie vorhin wieder als leer angezeigt.

Das funktioniert also nur beim ersten start, wird aus der opening FUnktion das handle weitergegeben und das wars, und ich kann es einmal in einem callback laden, aber kein zweites mal in einem anderen callback. auch nicht wenn ich es in dem Pushbutton callback wieder mit setappdata speichere.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2017, 20:49     Titel:
  Antworten mit Zitat      
Hallo,

die Linie existiert anscheinend nicht mehr. Warum nicht, kann ich ohne ein reproduzierbares Beispiel , in dem das Problem auftritt, nicht sagen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rony

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2017, 22:38     Titel:
  Antworten mit Zitat      
Okay, ich habe es endlich herausgefunden. Ich konnte nicht das ganze Programm posten da es einfach zu viel ist um da auf die schnelle durchzublicken.

Aber das Problem lag darin, dass ich zum Beispiel nochmal irgendwo im Quell Code hatte:
Code:
axes(handles.Axes1Handle);
plot(t,y);
Somit war das zuvor erstellte handles verschwunden, das ich mit handlename = plot(t,y) erstellt hatte.
Bist du auch der Meinung dass es daran liegt, oder liege ich auf dem Holzweg?


Und noch eine generelle Frage beim plotten in einer Gui, muss ich immer beim ersten mal wenn ich in das Axes1 plotten will es erst mit axes(handles.Axes1) auswählen und dann plot(t,y) machen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.04.2017, 21:16     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich konnte nicht das ganze Programm posten da es einfach zu viel ist um da auf die schnelle durchzublicken.

Dann muss man versuchen, das auf den relevanten Teil einzugrenzen.

Zitat:
Bist du auch der Meinung dass es daran liegt

Wenn nicht hold on eingeschaltet ist, ja.

Zitat:
muss ich immer beim ersten mal wenn ich in das Axes1 plotten will es erst mit axes(handles.Axes1) auswählen und dann plot(t,y) machen?

Nein, alternativ geht
Code:
plot(handles.Axes1, t, y)

Für mich ist es so die sauberere Variante.

Grüße,
Harald
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 - 2024 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.