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

handle von chart line

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 17.01.2016, 12:37     Titel: handle von chart line
  Antworten mit Zitat      
Hallo,

ich bin auf der Suche nach einer Möglichkeit das handle vom chart line object zu bekommen. Normalerweise kann man es beim plot Aufruf erhalten...

Code:

axh = gca; % axes handle
hplot = plot(axh,...) % chart line object


Gibt es aber auch eine andere Möglichkeit das handle nachträglich von einem existierenden Plot zu erhalten, so wie es das z.B. bei figure handle gcf und axes handle gca gibt?

Ich benötige das handle um die Daten des Plots folgendermaßen abzurufen:

Code:

% get data of existing plot
xVal = get(hplot,'XData');
yVal = get(hplot,'YData');
 


Vielen Dank für eure Hilfe!

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn es nur eine Linie gibt, geht dies:
Code:
p = plot(rand(10,1))
p2 = findobj(0, 'Type', 'Line')
isequal(p, p2)


Ansonsten brauchst du eine Möglichkeit, diese Linie von den anderen zu unterscheiden (z.B. in welchem Koordinatensystem ist sie, welche Farbe hat sie, ...).

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

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 17.01.2016, 15:53     Titel:
  Antworten mit Zitat      
Es können 1 oder 2 Signale mit jeweils x und y Werten sein. Wobei S1 blau und S2 rot ist. Letztendlich ist mir auch egal wie ich an die Daten kommen. Evtl. gibt es ja noch einen anderen weg, als über das chart line handle. Aber bisher habe ich dazu nur den oben genannten set befehl gefunden.

Aber dein Vorschlag scheint zu funktionieren. Bei 2 Signalen bekommen ich dann 2 Zellen mit jeweils den Datenarrays.

Code:
hplot = findobj(axesHandle,'Type','line');


Vielen Dank Harald!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 17.01.2016, 18:52     Titel:
  Antworten mit Zitat      
Ich habe jetzt leider noch ein Problem beim Löschen von Daten.

Ich habe ein Signal mit x und y Werten geplottet.

Zitat:
plot(axh,xVal,yVal)


Nun habe ich eine Funktion, welche die Max- oder Minpeaks des Signals anzeigen soll. Um die Peaks zu ermitteln, hole ich mir die Daten aus dem Plot...

Code:

% get chart line handle
hplot = findobj(handles.graph,'Type','line');
           
% get data of existing plot
xVal = get(hplot,'XData');
yVal = get(hplot,'YData');
 


Nun füge ich die Peaks dem Signal im Plot hinzu.

Code:

% add peaks to existing plot
set(axh,'NextPlot','add')
hplotPeaks = plot(axh, xVal(PeaksInd), PeaksVal);
 


Nun sollen die Peaks aber wieder ausgeblendet werden. Dazu lösche ich die Daten durch...

Code:

set(hplotPeaks,'XData',[])
set(hplotPeaks,'YData',[])
drawnow
 


Das funktioniert soweit auch alles. Sollen die Peaks nun erneut eingeblendet werden, beginnt es von vorn. Nun ändert sind aber der Aufbau von xVal und yVal.

Beim ersten Durchgang erhalte ich jeweils einen Array von 1xN Werten. Nach einmal an und wieder aus, sind xVal und yVal aber jeweils cell(1x2), wobei Zelle 1 leer ist -> (xVal{1,1} = []) und in Zelle 2 die Daten. Bei jedem Löschen kommt immer eine leere Zelle hinzu und die Daten stehen in der letzten Zelle.

Gibt es eine Möglichkeit das zu verhindern. Leider habe ich das Verhalten bisher in keinem Minimalbsp. reproduzieren können. Ich hoffe es ist auch so verständlich worum es geht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ist etwas schwierig nachzuvollziehen.

Insgesamt würde ich empfehlen, immer alle Handles in Variablen abzulegen, damit man sie später wieder nutzen kann. Bei GUIs gibt es die Möglichkeit, das an handles dranzuhängen oder mit setappdata/getappdata zu arbeiten.

Wie wäre es, statt die Daten zu leeren die Linie zu löschen
Code:

oder die Linie unsichtbar zu machen
Code:
set(hplotpeaks, 'Visible', 'off')


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

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 17.01.2016, 20:10     Titel:
  Antworten mit Zitat      
Der delete Befehl funktioniert. Ich hatte nur einen reset(hplotpeaks) versucht, was aber nicht funktioniert hat. Ich habe zwar auch an den delete Befehl gedacht, aber angenommen er löscht nur das handle ohne einen Einfluss auf das Objekt zu haben. Nun ja...falsch gedacht.

Sicherlich ist das mit den plot handles richtig. Aber meine eigene Plotfunktion ist mittlerweile so umfangreich, dass ich keine Lust habe das nochmal alles umzubauen.

Nochmals Danke Harald!

Gruß DSP
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.