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

multiple plots und legend

 

GregPhil
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2012, 11:35     Titel: multiple plots und legend
  Antworten mit Zitat      
Hallo in die Runde,

ich habe das Problem, dass die Farben die in der Legende verwendet werden nicht zu den Graphen meiner nicht-stetigen Funktionen passen. Ich habe schon so einiges ausprobiert. Kann mir vielleicht jemand helfen wie ich dieses Problem umgehen kann?
Code:

%first Graph
x1_450 = 10e-14:10e-16:10e-12;
y1_450 = 1.5e-5 + x1_450*0;
x2_450 = 10e-12:10e-12:10e-10;
y2_450 = (2.7e+3)*x2_450.^0.75;
x3_450 = 10e-10:10e-10:1.8e-6;
y3_450 = 5e-4 + x3_450*0;
%second Graph
x1_360 = 10e-14:10e-13:10e-10;
y1_360 = (3e10)*x1_360;
x2_360 = 10e-10:10e-4:10;
y2_360 = (5.6e3)*x2_360.^0.25;
x3_360 = 10:1:10e+2;
y3_360 = 10^4 + x3_360*0;

%plot first graph
p1 = loglog(x1_450,y1_450,x2_450,y2_450,x3_450,y3_450,'Color', [0,1,0]);
hold on;
%plot second graph
p2 = loglog (x1_360,y1_360,x2_360,y2_360,x3_360,y3_360,'Color',[1,0,0]);
%show the legend
legend('450nm','360nm');
hold off
 


Ich kann zwar die Textfarbe, oder die Hintergrundfarbe einer Legende manuel setzen aber nicht die Linienfarbe selbst. Oder geht dies irgendwie und ich konnte es nur nicht finden?

Danke im Vorraus.
Greg
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du zeichnest mit jedem Plot-Befehl mehrere Linien. Die Legende wird den Plots standardmäßig der Reihe nach zugeordnet. Wenn du das anders möchtest, kannst du die Handles der Linien, denen die Legende zugeordnet werden soll, angeben. Hier z.B. so:
Code:
legend([p1(1), p2(1)], '450nm','360nm');

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Snar008
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2014, 18:25     Titel:
  Antworten mit Zitat      
hey hab so ziemlich das selbe problem hab das jetzt so eingegeben wie su das gesagt hast aber er zeigt mir an der stelle immer noch ein Fehler aber ich seh ihn leider nicht könnt ihr mir hefen

Code:
if beta < 0
   p1 =plot(soln(1,:),soln(2,:),'g');
   else
      if beta == 0
      p2 =plot(soln(1,:),soln(2,:),'b');    
      else
      p3 =plot(soln(1,:),soln(2,:),'k');    
      end  
   end
   ylabel('y`(x)=U/U_\infty')
   xlabel('x')
   
   legend ([p1(1),p2(1),p3(1)],'Beta <0','Beta =0','Beta >0');
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

insbesondere da der Code so nicht reproduzierbar ist: welche Fehlermeldung wird dir angezeigt?
Auf den ersten Blick würde ich sagen, dass das Problem ist, dass nur p1, p2 oder p3 belegt wird, du aber alle drei zu verwenden versuchst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Snar008
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2014, 20:53     Titel:
  Antworten mit Zitat      
servus Harald,
das ist nur der teil des Programms der zum ausgeben gedacht war.
der ganze Quellcode hab ich jetzt mal unten angegeben.
er soll dafür da sein die Falkner-Skan Gleichung zu aproximieren und für verschiedene Druckgradienten Beta y' auf x aufzutragen. wenn ich nun legend ([p1(1),p2(1),p3(1)],'Beta <0','Beta =0','Beta >0'); benutze kommt die Fehlermeldung:
Undefined function or variable "p2".

Error in Experiment (line 64)
legend ([p1(1),p2(1),p3(1)],'Beta <0','Beta =0','Beta >0');
und es wird mir nur ein Graph in grün ausgegeben


ich hab dann einfach mal
legend ([p1(1)],'Beta <0','Beta =0','Beta >0'); eingegeben und da kamm dann alle 7 Graphen raus mit verschiedenen Faben nur die legende war natürlich nur das Beta< 0 drinnen

wahrscheinlich ist es echt nur ne kleinigkeit was da nicht hinhaut aber ich bin auch ein ziemlicher MatLap Neuling Very Happy



Code:
function RWP_Loeser()
close all
clear all
clc
   % Anfangs-/Endpunkt angeben
   x_0=0;
   x_end=5;
 
   % Anzahl Schritte angeben, Schrittweite berechnen
   n=100;
   h=(x_end-x_0)/n;
 
   % Loesungsarray
   soln = zeros(2,n);
Beta_1=[-0.15,-0.1,-0.05,0,0.25,0.5,0.75];
for j=1:7
   beta = Beta_1(j);
   
   % Bisektionsverfahren
   gamma =1;
   gamma_unten =0,1;
   gamma_oben = 2;
   for k=1:15  
       
     % Variablen initialisieren
     x=x_0;
     y_1=0;
     y_2=0;
     y_3=gamma;
     y=[y_1,y_2,y_3];
     
     for i=1:n
       dy=RungeKutta4(y,h,beta);
       y=y+dy;
       x=x+h;
       
       % Loesung speichern
       soln(1,i) = x;
       soln(2,i) = y(2);
     end  
     
     % Bisektionsalgorithmus
     if y(2)<1
       gamma_unten=gamma;
     else
       gamma_oben=gamma;
     end
     gamma=(gamma_unten+gamma_oben)/2;
   end
   hold on
   if beta < 0
   p1 =plot(soln(1,:),soln(2,:),'g');
   else
      if beta == 0
      p2 =plot(soln(1,:),soln(2,:),'b');    
      else
      p3 =plot(soln(1,:),soln(2,:),'k');    
      end  
   end
   ylabel('y`(x)=U/U_\infty')
   xlabel('x')
   
%    legend ([p1(1)],'Beta <0','Beta =0','Beta >0');
   legend ([p1(1),p2(1),p3(1)],'Beta <0','Beta =0','Beta >0');
b=gamma
end

end
% function beta
%  % Bisektionsalgorithmus
%      if y(2)<1
%        gamma_unten=gamma;
%      else
%        gamma_oben=gamma;
%      end
%      gamma=(gamma_unten+gamma_oben)/2;
%    end
%
%
% end


% Funktion der rechten Seite
function rhs=f(y,beta)
   rhs=[y(2),y(3),-y(1)*y(3)-beta*(1-(y(2))^2)];
end

% Schritt des Runge-Kutta-Verfahrens 4. Ordnung
function dy=RungeKutta4(y,h,beta)
k_1=f(y,beta);
k_2=f(y+(h/2)*k_1,beta);
k_3=f(y+(h/2)*k_2,beta);
k_4=f(y+h*k_3,beta);
dy=(h/6)*(k_1+2*(k_2+k_3)+k_4);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Erklärung für die Fehlermeldung habe ich dir ja schon gegeben.
Wie du sie sinnvoll vermeiden kannst, musst du aus deiner Anwendung heraus entscheiden.
So kann es sinnvoll sein, die Legende unmittelbar nach plot in der Verzweigung zu erstellen, damit die Legende an den Fall angepasst wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Snar008
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2014, 06:08     Titel:
  Antworten mit Zitat      
perfekt danke ich hab den code jetzt unter p3 geschrieben und dann hat es geklappt. danke dir vielmals Wink. aber ich hab immer noch nicht ganz verstanden dass wenn ich die legende außerhalb der schleife hinschreibe warum er dann p2 nicht erkennt.
LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

MATLAB kann nur das erkennen, was definiert wird.

Wenn ein Teil des Codes aber aufgrund nicht erfüllter Bedingungen nicht durchlaufen wird, wird die Variable aber nicht angelegt.

Geh den Code doch mal zeilenweise mit dem Debugger durch.
Vorher aber das hier unsinnige "clear all" entfernen (siehe diverse Threads dazu).

Grüße,
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.