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 Figure in GUI laden

 

kruu
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 15:29     Titel: Daten aus Figure in GUI laden
  Antworten mit Zitat      
Hi Leute,
Folgendes:

Ich habe bislang immer Daten aus Matlab figures makieren können und diese dann über:
h= get(gco)
x=h.XData;
y=h.YData;
auslesen können und dann natürlich erneut plotten können. Alles kein Problem, wenn ich das in einem m-file realisiere!

Versuche ich das in einem GUI klappt es leider nicht!
Ich würde gerne in einem Matlab-figure die Daten makieren und diese makierten Daten dann per ButtonClick im GUI in ein Axes im GUI laden!
Leider sagt mir Matlab immer das kein Feld "XData" existiert!

Hat da vlt. jemand eine andere Möglichkeit das Problem zu lösen?

Viele Grüße

kruu
Private Nachricht senden Benutzer-Profile anzeigen


yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 15.07.2010, 15:50     Titel:
  Antworten mit Zitat      
Moin kruu,

das liegt u.a. daran, dass Guis einen eigenen Workspace haben. Wenn Du noch gar keine Erfahrung mit Guis hast, dann schau doch bitte mal in den Tutorials und Verlinkungen. Ob Du dabei Guide verwendest oder nicht, ändert nichts am Verhalten einer Gui.

Ansonsten beschreibe das Problem doch bitte etwas genauer.

Grüße,
yankemen
Private Nachricht senden Benutzer-Profile anzeigen
 
kruu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 16:08     Titel:
  Antworten mit Zitat      
Hallo yankemen,
lieben Dank erst einmal für die schnelle Antwort.

Ich schaue schon den ganzen Tag Tutorials und Matlabhelps zu GUIs, habe bis jetzt aber leider noch keine Lösung gefunden.

Also ich möchte folgendes erreichen:

Hab mir ein GUI gemacht mit einem Pushbutton und einem Axes.
Ich würde nun gerne aus einem anderen figure, wo etwas geplottet ist, dieses geplottete in das GUI-Axes bekommen OHNE die Daten vorerst abzuspeichern und zu importieren!
Ich möchte durch den Push buttom aktivieren, dass sich das GUI die makierten Daten aus dem figure holt und wieder in seine Axis plottet. Danach sollen natürlich weitere Verarbeitungen stattfinden aber das ist erstmal egal!

Habe das mal in den Anhang gepackt was ich bis jetzt habe!

FFT_Analyse.m
 Beschreibung:

Download
 Dateiname:  FFT_Analyse.m
 Dateigröße:  4.46 KB
 Heruntergeladen:  431 mal
FFT_Analyse.fig
 Beschreibung:

Download
 Dateiname:  FFT_Analyse.fig
 Dateigröße:  4.07 KB
 Heruntergeladen:  379 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 15.07.2010, 18:32     Titel:
  Antworten mit Zitat      
Du musst das Axes wo die Daten sind, erkennen!
Hier ist eine Lösung:
Code:


%% Datenaufnahme
FigureAxes = findobj('Type','axes');

AxesChildren = get(FigureAxes(find(FigureAxes ~= gca)),'Children');

xfft=get(AxesChildren,'XData');
yfft=get(AxesChildren,'YData');
x=xfft;
y=yfft;
%% Plot der Daten
axes(gca)
%.....
%.....
 

_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
kruu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2010, 08:13     Titel:
  Antworten mit Zitat      
Hey josekamara,
vielen Dank funktionbiert super!
Wie lernt man bloß so Matlab zu programmieren, echt cool!

Schönes WE

Viele Grüße
kruu
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 16.07.2010, 08:27     Titel:
  Antworten mit Zitat      
Dies ist nur im Falle wenn nur ein Figure und GUI geöffnt sind. Anders gehts nicht! Dies zu vermeiden musst Du die Figures mit einem sogenannten Tag kennzeichnen.
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
kruu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2010, 08:44     Titel:
  Antworten mit Zitat      
Alles klar! Dann musss ich mal schauen wie ich den Figures ein Tag gebe!
Wie gehts das denn, wenn die ein tag haben?

Um den code zu verstehen! Was macht folgende Zeile und wie verlinkst Du die Befehle hier im Forum?

AxesChildren = get(FigureAxes(find(FigureAxes ~= gca)),'Children');

Gruß
kruu
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 16.07.2010, 08:48     Titel:
  Antworten mit Zitat      
kruu hat Folgendes geschrieben:
Alles klar! Dann musss ich mal schauen wie ich den Figures ein Tag gebe!
Wie gehts das denn, wenn die ein tag haben?

Um den code zu verstehen! Was macht folgende Zeile und wie verlinkst Du die Befehle hier im Forum?

AxesChildren = get(FigureAxes(find(FigureAxes ~= gca)),'Children');

Gruß
kruu


ich warr geraaae dabei die gleiche Frage zu stellen, hat mich auch interessiert ;)

ich glaube mit der zeile:
Code:

FigureAxes=findobj('type','axes')
 

bekommt man 2 objekte weil man da 2 axen hat.
aber wir wollen die daten von einem axes, damit wir sie ins andere übertragen.
mit der teil:
Code:

will man eigentlich den index und damit die axes bestimmen von der wir die daten holen.
aber gca hängt davon ab was zuletzt geklickt wurde.
woher weiss ich ob find dann 1 oder 2 liefert?




bevor du dein code eintippst den knopf 'code' drücken, nachdem du mit dem code fertig bist, den knop nochmal drücken.

übrigens wieso nicht direkt:
Code:

x=get(AxesChildren,'XData');
y=get(AxesChildren,'YData');

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 16.07.2010, 09:16     Titel:
  Antworten mit Zitat      
da der Axes und button in der gleichen Figure sind, wird natürlich dieses Axes als Current Axes betrachtet.
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 16.07.2010, 09:49     Titel:
  Antworten mit Zitat      
das ist natürlich logisch, hab vergessen dass es einen knopf gibt ;)
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
kruu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2010, 17:07     Titel:
  Antworten mit Zitat      
Hey Hab jetzt ein weiteres Problem.
Der Vorschlag von josekamara hat super geplppt, wenn ich nur ein Axis in meinem GUI hatte. Jetzt habe ich aber 2 Axis in mein GUI gepackt und der Code läuft nicht mehr!
Matlab sagt Immer:

??? Error using ==> get
Conversion to double from cell is not possible.

Error in ==> TestFFT_Analyse>MesswertaufnahmeButton_Callback at 89
xfft=get(AxesChildren,'XData');

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> TestFFT_Analyse at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)TestFFT_Analyse('MesswertaufnahmeButton_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback



Gibt es nicht vlt. doch noch eine andere Möglichkeit das zu programmieren? Die Datenaufnahme nevt hier echt.

Ich habe in der Praxis leider keine Möglichkeit dem Figure aus dem ich die Daten möchte ein Tag zu geben. Wie würde das denn aber mit Tag funktionieren?

Hoffe Ihr könnt mir helfen viele Grüße und lieben Dank

kruu
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.07.2010, 18:45     Titel:
  Antworten mit Zitat      
Hallo Kruu,

Du musst Dich für ein AXES-Objekt entscheiden, z.B.:
Code:
xfft=get(AxesChildren(1), 'XData');


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kruu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2010, 07:18     Titel:
  Antworten mit Zitat      
Hey Jan,
lieben Dank erst einmal für Deine schnelle Antwort.
Das hat aber leider nichts gebracht!
Wenn ich das untere Axis im GUI lösche geht die Datenaufnahme problemlos bei 2 Axis funktioniert die Daten aufnahme nicht mehr und er sagt die Fehlermeldung vom gestrigen Beitrag!

Hab Ihr vlt. noch weitere Ideen?

testplot.fig
 Beschreibung:
Diese Datei öffne ich und makiere den Graphen.

Download
 Dateiname:  testplot.fig
 Dateigröße:  6.41 KB
 Heruntergeladen:  375 mal
TestFFT_Analyse.fig
 Beschreibung:
Hier auf den Button "messwertaufnahme" klicken!

Download
 Dateiname:  TestFFT_Analyse.fig
 Dateigröße:  6.2 KB
 Heruntergeladen:  377 mal
TestFFT_Analyse.m
 Beschreibung:

Download
 Dateiname:  TestFFT_Analyse.m
 Dateigröße:  4.15 KB
 Heruntergeladen:  376 mal
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.