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

Mehrere Axes bei neustart des Programms "aufräumen&quo

 

MorrisThorne
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 13:02     Titel: Mehrere Axes bei neustart des Programms "aufräumen&quo
  Antworten mit Zitat      
Hallo miteinander,

und wiedermal plagt mich eine Frage.

Ich habe in meiner GUI 4 plots in 4 axes verteilt. Jetzt habe ich das Problem, wenn ich mein Programm neu starte, dass dann immer noch die alten Plots angezeigt werden. Ich möchte aber gerne, dass bei Programmstart die Axes leer sind.

Bisherige habe ich es folgendermaßen versucht:

Code:

function IUAnalyzer_OpeningFcn(hObject, eventdata, handles, varargin)
.
.
.
cla(handles.IU_characteristic_1)
cla(handles.IU_characteristic_2)
cla(handles.IU_characteristic_3)
cla(handles.IU_characteristic_4)
.
.
.
 


Da sagt mir Matlab aber, dass er den handle nicht kennt. Komisch, habe ich ihn doch per GUIDE aber erstellt.

Kennt jemand ne alternative dazu? Wenn ich nur
Code:


mache, dann löscht er mir zwar das erste Diagramm, aber die folgenden drei bleiben weiterhin bestehen.

Danke mal im Vorraus,

MorrisThorne
_________________

*Oink oink, kommt her, ihr Schweinchen! Oink oink!*
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 31.03.2008, 14:46     Titel:
  Antworten mit Zitat      
Moin,
ich habe auch ein kleines GUI mit mehreren Axes, in denen ich Plots darstellen lasse.
Allerdings sind diese bei mir standardmäßig leer, wenn ich das Programm starte!

Wie definierst du denn die Axes bzw. wie lässt du die Plots darin anzeigen?

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
MorrisThorne
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 15:34     Titel:
  Antworten mit Zitat      
Hi Steve,

ich konnte das Problem soweit lösen, vielleicht ne Holzhammermethode, aber sie funktioniert.

zunächst zu deinen Fragen: Die Axes habe ich vermittels GUIDE einfach eingefügt udn dann mit einem TAG versehen.

Ploten lasse ich mir dann die eingelesenen daten vermittels plot bzw. semilogy (per Checkbox kann man da hin und her schalten).



Zu meiner Lösung: zunächst habe ich mir eine Funktion geschrieben

Code:

function clearAllAxes(hObject, handles)
   set(hObject,'CurrentAxes',handles.IU_characteristic_1)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_2)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_3)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_4)
   cla

   set(hObject,'CurrentAxes',handles.IU_characteristic_1) %Um wieder die erste axes als CurrentAxes zu setzen
 


und diese rufe ich nun in der openingFunction auf

Code:
function IUAnalyzer_OpeningFcn(hObject, eventdata, handles, varargin)
.
.
.
clearAllAxes(hObject, handles)
.
.
.
 



Allerdings bin ich noch nicht ganz zufrieden damit. Wie ich jetzt rausgefunden habe, übernimmt Matlab immer als aktuelle axes diejenige, auf die ich gerade im GUI klicke.

Gibt es einen Weg, das zu umschiffen, also die axes als nicht anklickbar zu machen?

Gruß, MorrisThorne
_________________

*Oink oink, kommt her, ihr Schweinchen! Oink oink!*
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 31.03.2008, 15:51     Titel:
  Antworten mit Zitat      
Speicherst du die Plotdaten irgendwie ab und lässt sie dann plotten oder was meinst du mit "TAG versehen"?

Denn ich kann mir im Moment nicht in Ansätzen erklären, warum Matlab die Axes beim Programmstart füllen sollte. Denn im Normalfall sollten der function-Workspace ja beim beenden des Programms gelöscht werden, oder irre ich mich da?!
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
MorrisThorne
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 16:12     Titel:
  Antworten mit Zitat      
Du kannst im GUIDE deine Objekte auswählen und platzieren, also graphisch deine GUI arrangieren. Wenn du dann auf die Eigenschaften eines Objekts klickst, kannst du den Objekten eine ID zuordnen, einen sogenannten Tag. Mit diesem spreche ich dann in meinem *.m-File die Objekte an, also z.B. eben
Code:

handles.IU_characteristic_4
 


Die Daten die ich plotten will, habe ich ein eine neu angelegte handles-variable namens (achtung, kreative Namensgebung)
Code:

handles.data
 


geschrieben (und noch etwas umsortiert).

Plotten tu ich dann vermittels
Code:

plot(handles.data(:,1),handles.data(:,2))
 


bzw.
Code:

semilogy(handles.data(:,1),handles.data(:,2))
 


Was die Frage mit dem Workspace betrifft: gute Frage, habe ich bis jetzt noch nicht drauf geachtet
_________________

*Oink oink, kommt her, ihr Schweinchen! Oink oink!*
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 31.03.2008, 16:17     Titel:
  Antworten mit Zitat      
MorrisThorne hat Folgendes geschrieben:

Code:

plot(handles.data(:,1),handles.data(:,2))
 



Wann denn? Machst Du das schon in der OpeningFcn?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MorrisThorne
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 17:01     Titel:
  Antworten mit Zitat      
Nein, den Plot mache ich erst, nachdem ich die Daten eingelesen habe, bzw. nachdem ich die Checkbox aktiviere/deaktiviere (umschalten zwischen semilog-plot und linearem plot) in einer extrafunktion, also in etwa so:

Code:

function IUAnalyzer_OpeningFcn(hObject, eventdata, handles, varargin)
.
.
.
clearAllAxes(hObject, handles)
.
.
.


function readData(hObject, eventdata, handles)
%Einlesecode fürs Datenfile und Verteilung der Daten in handles.Data%
.
.
.
linearDataPlot(handles.data(:,1),handles.data(:,2))




function clearAllAxes(hObject, handles)
   set(hObject,'CurrentAxes',handles.IU_characteristic_1)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_2)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_3)
   cla
   set(hObject,'CurrentAxes',handles.IU_characteristic_4)
   cla

   set(hObject,'CurrentAxes',handles.IU_characteristic_1)


function CB_linearSemilog_Callback(hObject, eventdata, handles)
   handles = guidata(hObject);  

   if get(hObject,'Value')==0
      linearDataPlot(hObject,handles);
   else
      semilogDataPlot(hObject, handles);
   end


function linearDataPlot(hObject, handles)
   plot(handles.data(:,1),handles.data(:,2))

function semilogDataPlot(hObject, handles)
   semilogy(handles.data(:,1),abs(handles.data(:,2)))
 

_________________

*Oink oink, kommt her, ihr Schweinchen! Oink oink!*
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 31.03.2008, 17:25     Titel:
  Antworten mit Zitat      
Hm, komisch.
Ich denke wie steve, dass alle Daten in einer Funktion nach deren Ende gelöscht werden. Rufst Du nicht doch irgendwo die Plot-Funktion zu früh auf? Oder lädst Du einen früher gespeicherten Plot?
Kannst Du ein Beispiel posten, an dem das nachvollziehbar wird?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MorrisThorne
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2008, 09:28     Titel:
  Antworten mit Zitat      
Hm, also manchmal ist die Welt verrückt, und Computer noch viel verrückter.

Im Workspace habe ich gestern nachgesehen, da waren keine Daten drin. Auch nach mehrmaligem Neustart des Programms hat das ganze mit der funktion "clearAllAxes" gestern noch wunderbar funktioniert, also so wie ich es ja eigentlich wollte (Diagramme geleert!).

Heute Rechner angemacht, Programm gestartet: Fehlermeldung,


Code:

??? Error using ==> set
Invalid object handle.

Error in ==> IUAnalyzer>tab_01_clearAllAxes at 705
   set(hObject,'CurrentAxes',handles.IU_characteristic_1)

Error in ==> IUAnalyzer>IUAnalyzer_OpeningFcn at 110
   clearAllAxes(hObject, handles);

Error in ==> gui_mainfcn at 210
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in ==> IUAnalyzer at 40
    gui_mainfcn(gui_State, varargin{:});
 



sprich, heute kann er mit der Funktion nichts anfangen. Also habe ich sie auskommentiert, und siehe da, die Achsen sind bei jedem Neustart frisch aufgesetzt, also ohne schon vorhandene Kurven...

Kurzum, ich verstehe es nicht, was gestern falsch lief, heute tut er jedenfalls genau das, was ihr beide gesagt habt (und was mir auch logisch erscheint).

Trotz allem vielen dank mal soweit.

Die andere Frage, die mir nach wie vor noch offen blieb ist: wie kann ich denn deaktivieren, dass bei anklicken im GUI die Axes gewchselt werden? sprich, ich möchte mir dei axxes nur anzeigen lassen, aber nix drin rumklicken können.


Gruß, MorrisThorne
_________________

*Oink oink, kommt her, ihr Schweinchen! Oink oink!*
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.04.2008, 09:55     Titel:
  Antworten mit Zitat      
Hallo,
in Matlab-Hilfe scheint die Axes-Property HitTest das richtige für dich zu sein

Zitat:

HitTest {on} | off
Selectable by mouse click. HitTest determines
if the axes can become the current object (as returned by the gco command
and the figure CurrentObject property) as a result of a
mouse click on the axes. If HitTest is off,
clicking the axes selects the object below it (which is usually the figure
containing it).


also muss du über set(axesHandle,'HitTest','off') setzen

Zuletzt bearbeitet von denny am 01.04.2008, 17:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2008, 17:36     Titel:
  Antworten mit Zitat      
Danke Dennys, hat funktioniert, war genau das, was ich gebraucht habe.

Gruß, MorrisThorne
 
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.