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

legend richtig beschriften

 

FeLe
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 26.01.2011, 17:49     Titel: legend richtig beschriften
  Antworten mit Zitat      
Ich will eine plot function schreiben, die einen Graph mit der beliebige Anzahl von kurven erzeugt.

Beispiel: Ich habe die Messwerte bei verschiedenen Temperaturen und Drucken.

Mal sind es 2 Temperaturen
Temp/C Druck/bar Value
'-40.00' 0 2.51
'-40.00' 150 3.02
'-40.00' 250 5.34
'23.00' 0 1.25
'23.00' 150 2.21
'23.00' 250 3.06

Mal sind es 3 Temperaturen
Temp/C Druck/bar Value
'-40.00' 0 2.51
'-40.00' 150 3.02
'-40.00' 250 5.34
'23.00' 0 1.25
'23.00' 150 2.21
'23.00' 250 3.06
'50.00' 0 2.32
'50.00' 150 3.71
'50.00' 250 5.19

Die Anzahl der Druckwerte variiert auch. Der Graph soll die abhängigkeit der Werte von dem Druck darstellen. Je nach dem wie viele Temperatur-Werte man hat, so viele Kurven sieht man auf dem Graph.

Code:
Hier ist meinen Code
hf=figure;   % create figure
hold on   % retain current graph in figure
% plot results
for k = 1:length(coutTValues)
    a = genvarname('x', who);
    b = genvarname('y', who);
   eval([b,'=Values(', von, ':', bis ',ColumnValues));'])
   eval([a,'=Values(', von, ':', bis ',ColumnPressure));'])
   eval(['plot(', a, ',', b, ',', char(39), LineSpec, char(39), ');'])
end
legend('show')
 


Das Problem ist die Legende richtig zu beschriften. Jetzt kriege ich nur data1, data2 usw., will aber '-40.00', '23.00' stehen haben.Ich habe schon versucht das über handle hin zu bekommen.
Code:

eval(['legend(h,', char(s.results.maxdevP1(start,1)),')'])
 

Das wird aber bei jedem Durchlauf überschrieben. Hat jemand eine gute Idee?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.01.2011, 19:03     Titel:
  Antworten mit Zitat      
Hallo,

warum tust du dir auch dieses Drama mit eval an? Das tut doch schon in den Augen weh.
Wenn du dabei bleiben willst, wäre es am geschicktesten, ein Cell Array mit den Legenden zu erstellen.
Code:
beschrift = cell(1, length(coutTValues));
for k = 1:length(coutTValues)
    ...
    c{k} = 'gewünschte Legende';
end
legend(c)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 26.01.2011, 19:26     Titel:
  Antworten mit Zitat      
Hallo Harald
Mir ist schon bewusst, dass das schrecklich aussieht. Nur habe ich bis jetzt keine andere Methode kennengelernt, um irgendwas in Matlab dynamisch zu erzeugen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.01.2011, 20:16     Titel:
  Antworten mit Zitat      
Hallo,

es gibt in der Tat keine andere mir bekannte Möglichkeit, mit dynamischen Variablennamen zu arbeiten. Aber wozu? Was spricht gegen
Code:
x = Values(von:bis, ColumnValues)

etc. (wenn ich das richtig lese)

Wenn die Sorge ist, dass x schon als Variablenname vergeben ist: aussagekräftige Variablennamen verwenden. "Values" verwendest du ja auch.

Funktioniert im übrigen mein Vorschlag für die Legende?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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: 26.01.2011, 21:32     Titel:
  Antworten mit Zitat      
Hallo FeLe,

Zitat:
Nur habe ich bis jetzt keine andere Methode kennengelernt, um irgendwas in Matlab dynamisch zu erzeugen.

Das sollte Dir zu denken geben. Das dynamische Erzeugen von Variablen ist nämlich schlicht unübersichtlich, langsam, ineffizient und immer vermeidbar. Deshalb gibt es auch keine hübsche Method dafür.

Du kannst ja mal im Forum nach "EVAL" suchen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 27.01.2011, 10:39     Titel:
  Antworten mit Zitat      
Zu erst bedanke ich mich für ihre Antworten!
An Harald: Dir ist meinen besonderen Dank für deinen Vorschlag. Ich werde es heute ausprobieren. Bezüglich; "auss6agekräftige Variablennamen verwenden." Ich will plot funktion verwenden, plot(x1, y1, x2, y2 … xn, yn). Ich weiß aber nicht wie viel x und y Werte ich haben werde. Ich kann zwar die Daten in eine Struktur packen und über Index ansprechen, aber das Problem, die Legende richtig zu beschriften, wird bleiben. So was in der Art:
Code:

        Structur.data
   for i=1:length(structur.data(:,Column))
      x= structur.data(i*laenge, xColumn);
      y= structur.data(i*laenge, yColumn);
      plot(x,y);
   end

 

Jetzt interessiert mich das Thema aber wirklich. Wie geht man bei der Programmierung vor, wenn die Objekt-Menge vorher nicht bekannt ist oder soll sich während des Programmablaufs ändern. Wo kann ich „Best Practices” für das Thema finden (Link zu der Homepage oder Buch). Ich bedanke mich im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 11:12     Titel:
  Antworten mit Zitat      
Hallo,

die Plot-Funktion kann auch so verwendet werden:
Code:
plot(x1, y1);
hold on
plot(x2, y2);
...
plot(xn, yn);
hold off

Das ist oft einfacher.

Alternativ können die verschiedenen Daten auch in den Spalten einer Matrix vorliegen, und MATLAB kümmert sich automatisch um den Rest:
Code:
plot([x1, x2], [y1, y2])


Falls die Daten in einem Cell Array oder einer Struktur liegen, kann man etwas ausnutzen, das normal "nervt": Indizieren produziert Listen.
Code:
x = linspace(0, 2*pi);
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
c = {x, y1, x, y2};
plot(c{:})
c = {x, y1, x, y2, x, y3};
figure
plot(c{:})

Du siehst, ich kann dieselbe Schreibweise verwenden, egal wieviele Wertepaare c enthält.

Zu den Legenden hatte ich ja schon eine Möglichkeit angeboten. Falls die nicht funktioniert, bitte sagen wieso und warum.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 27.01.2011, 15:49     Titel:
  Antworten mit Zitat      
Code habe ich ich ausprobiert und der funktioniert gut. Dake!
Es müssen nur eckige Klamern eingefügt werden

Code:

c = cell(1, length(coutTValues));
for k = 1:length(coutTValues)
    ...
    c{k} = 'gewünschte Legende';
end
legend([c])
 


Mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 27.01.2011, 15:50     Titel:
  Antworten mit Zitat      
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.