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

Daten aus subplot auslesen

 

Joe66
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 12:26     Titel: Daten aus subplot auslesen
  Antworten mit Zitat      
Hallo Zusammen!
Ich möchte die XData und YData aus einer vorliegenden *.fig Datei auslesen. Mein Problem ist die "Aktivierung" eines bestimmten subplots.
Das Auslesen der Daten aus einer Datei, die nur einen plot enthält verwende ich folgenden code (bei geöffneter und aktivierter grafik):
Code:

axis_temp=gca;
LineHandle = findobj(axis_temp,'Type','Line');
xdata_temp=get(LineHandle,'XData');
ydata_temp=get(LineHandle,'YData');
figure;
plot(xdata_temp{3},ydata_temp{3})
 

Wie aktiviere ich aber nun in einer 2x2 subplot-Darstellung zB die linke, obere Darstellung?
Hab schon länger gesucht und rumprobiert aber nichts hinbekommen :-\
Hoffe, jemand kann mir da weiterhelfen..
Besten Dank schonmal für jeden Hinweis!

Zuletzt bearbeitet von Joe66 am 10.11.2009, 13:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.11.2009, 13:26     Titel:
  Antworten mit Zitat      
Alle Achsenobjekte kann man z.B. so identifizieren:

Code:

subplot(2,1,1)
subplot(2,1,2)
get(gcf,'Children')
 


Besserer / sicherer Code hängt vom Zusammenhang ab.

Andreas

[/quote]
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Joe66
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 13:49     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort! Mit
Code:

wird allerdings, so wie ich das sehe, der entsprechende subplot zwar aktiviert, es werden aber auch sämtliche Daten gelöscht. Der subplot 1 wird kompett weiß und es ist kein Handle der Linien mehr zu finden.

edit:
Muss mich korrigieren:
Code:

subplot(2,2,2)
children_temp=get(gcf,'Children')
test = findobj(children_temp,'Type','Line')
 

gibt mir 18 handles zurück. Diese kann ich aber nicht vernünftig zuordnen. In meiner ursprünglichen *.fig-Datei sind im rechten, oberen subplot 3 Kurven geplottet, in den anderen drei subplots jeweils 2 Kurven.
Mit den 18 Handles aus dem oben angegeben Code bekomme ich nun 6 Kurven aus der gesamten figure hin - allerdings interessanterweise keine davon aus dem subplot 2. Die anderen 12 Handles beinhaltet nur sinnlose Werte..
Ich mache nochmal ein komplettes Codebeispiel fertig damit man das besser nachvollziehen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Joe66
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 14:52     Titel:
  Antworten mit Zitat      
Hier das Codebeispiel:
Code:

clc;
clear all;
x=1:1:10;
y=rand(1,10);
y2=ones(1,10)*0.5;

subplot(2,2,1)
plot(x,y+0)
hold on;
plot(x,y2+0)
hold off;
subplot(2,2,2)
plot(x,y+1)
hold on;
plot(x,y2+1)
hold off;
subplot(2,2,3)
plot(x,y+2)
hold on;
plot(x,y2+2)
hold off;
subplot(2,2,4)
plot(x,y+3)
hold on;
plot(x,y2+3)
hold off;

subplot(2,2,4)
a=get(gcf,'Children')
b = findobj(a,'Type','Line')

i=1

xdata_temp=get(b(i),'XData');
ydata_temp=get(b(i),'YData');
figure;
plot(xdata_temp,ydata_temp,'b*')
 

Für i=1 bekomme ich nun in meiner neuen figure die achte Kurven, für i=2 die siebte usw. Klappt also in dem Fall ganz gut, wobei es völlig egal zu sein scheint, welchen subplot ich aktiviere: Bei subplot(2,2,X) - solange X = 1,2,3 oder 4 ist, erhalte ich immer das selbe Ergebnis..

Meine Vermutung zu meiner ursprünglichen figure ist nun, dass es sich da nicht um Linien-Objekte handelt.. Mal weitergucken..
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.11.2009, 17:09     Titel:
  Antworten mit Zitat      
Zitat:
Meine Vermutung zu meiner ursprünglichen figure ist nun, dass es sich da nicht um Linien-Objekte handelt.. Mal weitergucken..


Vielleicht mal die "plottools" einschalten wenn die Figure geöffnet ist und die Eigenschaften durchsuchen. Das könnte ergeben welcher Art die Daten sind.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Joe66
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 18:30     Titel:
  Antworten mit Zitat      
Hab ich mal gemacht - ich glaube ich bin da auf dem richtigen Weg Smile
morgen mehr...
Private Nachricht senden Benutzer-Profile anzeigen
 
Joe66
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2009, 10:39     Titel:
  Antworten mit Zitat      
Hab es hinbekommen :-)
Hatte herausgefunden, dass es sich um Legenden handelt: Hatte mal aus meiner ursprünglichen figure manuell (also per figure-properties) die legenden gelöscht und dann genau die richtige Anzahl von Linienobjekten gefunden.
Hab dann versucht, den findobj-Aufruf so zu verändern, dass die Legenden nicht gefunden werden, bzw. aussortiert werden. Das hat aber zB. über
Code:
linienobjekte = findobj(gcf,'Type','Line','-and','-not','Tag','legend');
oder auch
Code:
linienobjekte = findobj(gcf,'-not','Tag','legend','-and','Type','Line');
nicht geklappt - es ergaben sich immernoch zu viele Objekte.
Nun läufts so, dass ich vorher aussortiere:
Code:

legendobjekt=findobj(gcf,'Tag','legend')
legend(legendobjekt(1),'off')
legend(legendobjekt(2),'off')
legend(legendobjekt(3),'off')
legend(legendobjekt(4),'off')

linienobjekte = findobj(gcf,'Type','Line');
 

Damit funktionierts super. Über die richtige Anwendung von findobj sollte das Ganze meiner Meinung nach aber auch durch einen einzigen Aufruf realisierbar sein..
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.