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

Code optimieren für Plots

 

manphiz
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2017, 08:35     Titel: Code optimieren für Plots
  Antworten mit Zitat      
Hallo Zusammen,
Ich habe etwas viel Code und würde gerne wissen, ob man es mit schleifen oder anderen Tricks vereinfachen kann.
Es geht darum, dass zuvor ermittelte Werte geplottet werden sollen, wenn eine Checkbox ausgewählt ist.
Dazu folgender Code, Namen der Variablen sind hier vereinfacht:

Code:
% Plot Diagramm 1
% Überprüfen ob Diagramm 1 ausgewählt ist
chk_1= get(handles.chk_1, 'Value');
if chk_1== 1
    x_Wert_1=handles.x_Wert_1;      % Werte aus Gui holen
    y_Wert_1=handles.y_Wert_1;
    axes(handles.axes1);  
    plot_1 =plot (x_Wert_1, y_Wert_1, 'k-o','LineWidth',1.5,'DisplayName',' Diagramm 1’);
    xlabel('x Achse');
    ylabel('y Achse');
    xlim([0 120])
    ylim([0 6000])
    hold on
    grid on
 
handles.plot_1=plot_1;
guidata(hObject, handles);
end

% Plot Diagramm 2
% Überprüfen ob Diagramm 2 ausgewählt ist
chk_2= get(handles.chk_2, 'Value');
if chk_2== 1
    x_Wert_2=handles.x_Wert_2;      % Werte aus Gui holen
    y_Wert_2=handles.y_Wert_2;
    axes(handles.axes1);  
    plot_2 =plot (x_Wert_2, y_Wert_2, 'k-o','LineWidth',1.5,'DisplayName',' Diagramm 2’);
    xlabel('x Achse');
    ylabel('y Achse');
    xlim([0 120])
    ylim([0 6000])
    hold on
    grid on
 
handles.plot_2=plot_2;
guidata(hObject, handles);
end

% usw, es folgen noch einige mehr


Problem ist, dass einige Plots übersprungen werden können, falls eine Checkbox nicht gewählt ist.
Hoffe es geht etwas einfacher

Danke und Gruß
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: 05.07.2017, 15:51     Titel: Re: Code optimieren für Plots
  Antworten mit Zitat      
Hallo manphiz,

Zitat:
Problem ist, dass einige Plots übersprungen werden können, falls eine Checkbox nicht gewählt ist.

Das verstehe ich nicht.

Code:
for index = 1:2
  chk = get(handles.(sprintf('chk_%d', index)), 'Value');
  if chk == 1
    x_Wert = handles.(sprintf('x_Wert_%d', index));      % Werte aus Gui holen
    y_Wert = handles.(sprintf('y_Wert_%d', index));
    axes(handles.axes1);  
    plotH = plot(x_Wert, y_Wert, 'k-o','LineWidth',1.5,'DisplayName', ...
           sprintf(' Diagramm %d', index));
    xlabel('x Achse');
    ylabel('y Achse');
    xlim([0 120])
    ylim([0 6000])
    hold on
    grid on
 end

Also einfach alle Indices über die Schleife bestimmen. Noch einfacher wäre es natürlich, wenn Du von Anfang an die Variablen und Felder als Array definiert hättest, anstatt die Indices in den Namen zu verstecken.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2017, 09:13     Titel:
  Antworten mit Zitat      
Danke dir Jan, das hilft mir sehr!
Gibt es dann noch eine Möglichkeit den plot als handle zu speichern, denn in weiteren Funktionen ändere ich Fabre/Art/usw des Plots.

Das Problem mit dem Überspringen hat sich geklärt, da die Checkboxen auch mit Indizes versehen sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2017, 09:55     Titel:
  Antworten mit Zitat      
Hab es versucht so in die Schleife einzubauen:

Code:

for index = 1:2
  chk = get(handles.(sprintf('chk_%d', index)), 'Value');
  if chk == 1
....
    'plot_%d', index = plot(x_Wert, y_Wert, 'k-o','LineWidth',1.5,'DisplayName', ...
           sprintf(' Diagramm %d', index));
....
handles.(sprintf('plot_%d', index)) = (sprintf('plot_%d', index));
    guidata(hObject, handles)
 end
end


Jedoch funktioniert es nicht:

" Invalid field name: plot "

Weiß jemand eine Lösung?
Danke im voraus
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: 12.07.2017, 18:45     Titel:
  Antworten mit Zitat      
Hallo manphiz,

Code:
   'plot_%d', index = plot(x_Wert, y_Wert, 'k-o','LineWidth',1.5,'DisplayName', ...
           sprintf(' Diagramm %d', index));

Das ist keine valide Matlab-Syntax. Was möchtest Du hiermit erreichen? Wie man einen Fieldname mit einem Index im Namen versieht, hast Du in der nächsten Zeile gezeigt:
Zitat:
Code:
handles.(sprintf('plot_%d', index)) = (sprintf('plot_%d', index));

Aber jetzt ist der Inhalt von "handles.plot_1" der String 'plot_1'. Ich denke, Du meinst:
Code:
handles.(sprintf('plot_%d', index)) = plot(x_Wert, y_Wert, 'k-o','LineWidth',1.5,'DisplayName', ...
           sprintf(' Diagramm %d', index));

Anstatt den Index im Namen zu verstecken, wäre ein Array besser:
Code:
handles.plot(index) = plot(x_Wert, y_Wert, 'k-o','LineWidth',1.5,'DisplayName', ...
           sprintf(' Diagramm %d', index));

Ist auch hübscher.

Der plot Befehl gibt übrigens kein Handle zu einem "Plot"-Objekt zurück (soetwas gibt es gar nicht!), sondern den Handles eines line Objekts. Dadurch kann man nicht einfach "die Art des Plots ändern", wie Du schriebst, aber z.B. Farbe geht sehr gut.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2017, 14:03     Titel:
  Antworten mit Zitat      
Vielen Dank Jan, so klappt alles!
Bin mit den Schleifen noch nicht so fit Smile
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.