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

Subplots/Plot in GUI je nach Checkbox konstellation erzeugen

 

NoPlan
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 29.11.08
Wohnort: Hildesheim
Version: ---
     Beitrag Verfasst am: 06.11.2010, 11:26     Titel: Subplots/Plot in GUI je nach Checkbox konstellation erzeugen
  Antworten mit Zitat      
Liebe Forennutzer,

ich bastel seit einiger Zeit an einem kleinen Tool zur Darstellung von Messwerten. Bisher ergaben sich maximal vier mögliche Diagramme aus unseren Messungen. Da nun allerdings ein neues Messgerät implementiert werden muss, sind bis zu 18 verschiedene Diagramme möglich. Zusätzlich sollen über subplots auch mehrere Diagramme zeitzeitig neben- oder übereinander dargestellt werden.

Das GUI ist so aufgebaut, dass der Benutzer über Checkboxen Haken setzen kann, welches Diagramm bzw. welche Diagramme er angezeigt haben möchte.
Dies habe ich entsprechend umständlich realisiert in dem ich für jede Konstellation einen Fall gebaut habe:

z.B.:
Code:

% Nur ein Haken gesetzt --> Ein Diagramm
if checkbox1==1 && checkbox2==0 && checkbox3==0 && checkbox4==0
   plot(t,U)
end

if checkbox2==1 && checkbox1==0 && checkbox3==0 && checkbox4==0
   plot(t,I)
end

% Zwei Haken gesetzt --> Subplot mit zwei plots
if checkbox1==1 && checkbox2==1 && checkbox3==0 && checkbox4==0
   subplot(2,1,1)
      plot(t,U)
   subplot(2,1,2)
      plot(t,I)
end;
 


dies war bei den insgesamt nur vier verschiedenen Diagrammen zwar umständlich aber wegen der insgesamt nur 15 kombinationsmöglichkeiten noch möglich.

Für das neue Messgerät mit den bis zu 18 Diagrammen und den sich daraus ergebenden Kombinationsmöglichkeiten würde ich das ganze gerne etwas eleganter lösen um nicht jede einzelne Variante einzeln abarbeiten zu müssen.

Ich bin für jeden Tipp dankbar.

Viele Grüße
Chris.
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 30.11.2010, 23:26     Titel:
  Antworten mit Zitat      
Hallo,

dafür gibt es einige Lösungen., z.B. du erstellt einen Vekor und speicherst ihn in der handles Struktur mit ab, nennen wir ihn "status". Der status Vektor hat 18 Elemente (entspricht den 18 Checkerboxen) und in den Callbacks der Checkboxen weist du dem entsprechenden Feld des status Vektors den Wert 1 zu. Also
Code:

status(1) = 1; % im Callback der 1. checkerbox
status(8) = 1; % im Callback der 8. checkerbox
usw.
 

Nun kannst du über
Code:

idx = find(staus)
 

die Nummern der Häkchen erfassen, die gedrückt wurden.
Die Plots ließen sich dann etwa so zeichen:
Code:

numerofplots = nnz(status);
for k = 1:numerofplots
   subplot(1,numberofplots,k);
   y = M(idx(k)) % hier ist M z.B. ein Vektor der die Werte für die einzelnen Plots enthält, welche abhänig von dem gedrückten Häkchen sind. Wurde z.B. Häkchen 4,7,15 gedrückt, so würde im ersten Schleifendurchlauf (-->idx(1)) "y" der Wert M(4) zugewiesen.
   plot(x,y)
end
 


Du köntest aber auch den status-Vektor sparen und z.b. mit dem Befehl;
Code:

nach Checkerboxen suchen, die aktiviert sind.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
katzeh

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2014, 17:05     Titel: Frage zur Erstellung des Vektors
  Antworten mit Zitat      
Ich habe ein ähnliches Problem und hoffe ich kann mich mal ganz dreist an diese Frage ranhängen auch wenn sie schon älter ist.

Ich habe auch eine GUI mit 21 Checkboxen und möchte dann den Vektor, den mir die Checkboxen liefern, abspeichern. Also ein Vektor mit 21 Elementen mit 0 und 1. Wie genau schaffe ich das, dass dieser Vektor abgespeichert wird? (Sorry, bin der totale Matlab-Anfänger)

Tausend Dank!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.02.2014, 18:47     Titel:
  Antworten mit Zitat      
Hallo,

den Ansatz hat Sco ja schon dargelegt. Was nicht explizit da steht:

Am Anfang jedes Callbacks, der mit status arbeitet, sollte status geladen werden mit:
Code:
status = handles.status;


Am Ende jedes Callbacks, der status verändert (also insbesondere die Checkbox-Callbacks), sollte stehen:
Code:
handles.status = status;
guidata(hObject, handles)

Letzteres gilt auch für die OpeningFcn, in der status initialisiert werden sollte.

Mehr Infos gibt es in der Doku von
Code:


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2014, 14:08     Titel:
  Antworten mit Zitat      
Vielen Dank, Harald. Aber ich bin glaub ich einfach zu dämlich.

Ich habe in der OpeningFcn versucht des folgende zu initialisieren:

Code:
handles.status = status;


aber da meckert er schon direkt rum. In den Callbacks der checkboxes hab ich dann folgendes gemacht:

Code:
status = handles.status;
status(1) = 1;
handles.status = status;
guidata(hObject, handles);


Aber wie gesagt, er meckert dann schon rum wegen der initialisierung. Muss da noch irgendwas hin? und wie kann ich am Ende diesen Vektor dann genau rausschreiben, dass ich ihn z.B. aufrufen und mir anzeigen lassen kannn? Es tut mir wirklich leid, ich bin echt schwer von Begriff bei diesen Sachen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
aber da meckert er schon direkt rum.

Ich nehme an, du sprichst von einer Fehlermeldung. Leider fehlt die entscheidende Information: was ist die Fehlermeldung?

Du musst status natürlich vorher mit dem Anfangsstatus anlegen, z.B.
Code:
status = zeros(21,1);

wenn beim Start der GUIs alle Checkboxen ohne Haken sind.

Generell bitte immer die Fehlermeldungen angeben - man kann sie in der Regel nämlich nicht erahnen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2014, 11:11     Titel:
  Antworten mit Zitat      
Oh sorry, die wollte ich natürlich eigentlich mit reingemacht haben.

"Error using GUI>GUI_OpeningFcn
Not enough input arguments."

Das war die Fehlermeldung. Ja, den status hatte ich so auch mit in die OpeningFcn eingebaut (erst nachdem ich den Post geschrieben habe) trotzdem gleiche Fehlermeldung.
 
katzeh

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2014, 17:25     Titel:
  Antworten mit Zitat      
Ok, ich bin wirklich dämlich, Fehler gefunden.
Falls ich noch eine allerletzte Frage stellen darf, womit mein Problem endgültig gelöst wäre:

Ich habe die GUI und den Vektor, jetzt würde ich gerne noch einen Button haben, den ich, nachdem ich alle Checkboxen ausgewählt habe die ich möchte, drücken kann und dieser Button dann die GUI schließt und den Vektor rausschreibt, so dass ich ihn dann in Matlab aufrufen könnte. Also
>>x und der Vektor wird mir ausgegeben.

Vielen Dank Harald, ich weiß deine Mühe wirklich zu schätzen und bin dir sehr sehr dankbar!
 
Harald
Forum-Meister

Forum-Meister


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

ich empfehle es zwar generell nicht, aber die einzige Möglichkeit ist hier wohl assignin. Etwa so:

Code:
assignin('base', 'x', Vektor)
close(handles.figure1)


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2014, 11:03     Titel: Vielen vielen Dank!!
  Antworten mit Zitat      
Ich bin dir wirklich unendlich dankbar, Harald. Vielen Dank für deine Geduld und deine Hilfe! Es hat alles geklappt und ich kann in Frieden weiterleben Wink
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.02.2014, 23:16     Titel:
  Antworten mit Zitat      
Gerne doch :)

Ein schönes Wochenende!
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 - 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.