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

alle Substructures in einem Plot darstellen

 

Mattes

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2011, 11:59     Titel: alle Substructures in einem Plot darstellen
  Antworten mit Zitat      
Hallo!

Ich habe ein Structure-Array und möchte gerne die Substructure (es sind Funktionswerte) in einem Plot darstellen, so dass ich für jede Substructure eine Linie bekomme.
Ich mache das wahrscheinlich sehr unständlich:

Code:

field = fieldnames(struc);
n = size(field,1);

for i=1:n
  c = char(field(i));
  plot(field(i));
  hold all;
end

hold off;
 

Gibt es da vielleicht eine bessere, elegantere Lösung?

Gruß, Mattes


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.12.2011, 12:59     Titel:
  Antworten mit Zitat      
Hallo

Hier etwas auszusagen ist schwer, ohne Kenntnis deiner Datenstruktur.
Ein Minimales lauffähiges Beispiel wäre auch ganz toll!!!

Jedenfalls, würde ich HOLD ALL aus der Schleife rausziehen, weil es nur einmal angewendet werden muss.
Schleife brauchst wahrscheinlich du hier auf jeden Fall.
Wenn es nur um Plotten geht, dann könnte man auch STRUCTFUN verwenden. Das ist aber mehr versteckte Schleife, welche für Jedes Feld der übergebener Struktur ausgeführt wird, siehe Beispiel hier unten:

Code:

S.A=[1:10]
S.B=[10:-1:1]
figure; hold on;
structfun(@(x)plot(x),S);
hold off;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Mattes

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2011, 13:45     Titel:
  Antworten mit Zitat      
hier mal ein Mini-Prog.:
Code:

x=-1:0.01:1;

struc.y1 = x.^2;
struc.y2 = x.^3;

list = fieldnames(struc);
n = size(list);

hold all;
for i=1:n
    c = char(list(i));
    plot(x,struc.(c));

end
hold off;
 

Ich hatte gedacht, vielleicht gibt es ein simplen Befehl um alle substruct zu plotten. Mein Programm läuft ja, es wäre halt nur übersichtlicher geworden. Dann bleibt es si wie es ist, trotzdem vielen Dank!
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.12.2011, 14:00     Titel:
  Antworten mit Zitat      
Ja, so wie es ist doch auch okay.
Man kann nicht immer alles in einer Zeile lösen.

Code:

x=-1:0.01:1;

struc.y1 = x.^2;
struc.y2 = x.^3;

list = fieldnames(struc);
n = size(list);

hold all;

structfun(@(sdata)plot(x,sdata),struc)

 
hold off;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Mattes

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2011, 15:04     Titel:
  Antworten mit Zitat      
Kann man mit structfun auch nur die Werte z.B. von 50 bis 150 plotten? Denn structfun ist doch was übersichtlicher, als meine Variante.

Code:

x=-1:0.01:1;

struc.y1 = x.^2;
struc.y2 = x.^3;

hold all;

structfun(@(sdata(50:150))plot(x(50:150),sdata),struc)
 
hold off;
 

Mein Ansatz funktioniert schon mal nicht. Die Fehlermedung ist:
Unbalanced or unexpected parenthesis or bracket.
Man kann wohl nicht noch mit angeben welchen Bereich er nur plotten soll.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.12.2011, 15:07     Titel:
  Antworten mit Zitat      
Ja kann man:
Code:

x=-1:0.01:1;

struc.y1 = x.^2;
struc.y2 = x.^3;

hold all;

structfun(@(sdata)plot(x(50:150),sdata(50:150)),struc)
 
hold off;
 
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.