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

Plots in dynamischer Umgebung Labeln/Legende

 

Litlebuda
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 13:31     Titel: Plots in dynamischer Umgebung Labeln/Legende
  Antworten mit Zitat      
Hallo in die Runde,

ich habe ein Problem mit der Legende in einer dynamischen Umgebung. Hier erst mal mein Code:

Code:
for j=[1 2]
   
for i=1:5
   
   
filename=['ref',num2str(i),'_A_L',num2str(j),'.csv'];  % liest Daten dynamisch aus  
                                                                                 %csv dateien
   
data=csvread(filename,7,0);
   
if j==1
   
figure(1)
%%Chlorella MassFraction Fall A, Line 1
hold on

   p=plot(data(:,3),data(:,4),'Marker',sym{i},'LineWidth',2,'LineStyle','none','Color','k');
h=plot(data(:,3),data(:,4),'LineStyle','-','LineWidth',1,'Color','k');

%% ich lasse die Daten zwei mal Plotten um die Marker Größe seperat von der LineWidth einzustellen
legend_strings{i}=['Ref.level: ',num2str(i)];   % erzeugt die Legend dynamisch
l=legend(p,'location','south',legend_strings);     % sollte den Plot p Labeln
set(l,'FontSize',12)
 
title('Chlorella MassFraction, Fall A, Line 1','FontSize',16,'FontWeight','bold')  
xlabel('Z-Koordinate [m]','FontSize',16,'FontWeight','bold')
ylabel('MassFractionChlorella','FontSize',16,'FontWeight','bold')
box on
xlim([-0.003 0.003])
set(gca,'FontSize',16,'FontWeight','bold','XGrid','off','YGrid','on')
   
else
       
figure(2)   %% dieser Fall Funktioniert
%Chlorella MassFraction Fall A, Line 2
hold on
plot(data(:,3),data(:,4),'LineWidth',1.5,'color',color(i,:))
title('Chlorella MassFraction, Fall A, Line 2','FontSize',16,'FontWeight','bold')
xlabel('Z-Koordinate [m]','FontSize',16,'FontWeight','bold')
ylabel('MassFractionChlorella','FontSize',16,'FontWeight','bold')
box on
xlim([-0.003 0.003])
set(gca,'FontSize',16,'FontWeight','bold','XGrid','off','YGrid','on')
legend_strings{i}=['Ref.level: ',num2str(i)];
l=legend('location','south',legend_strings);
set(l,'FontSize',12)
   
end

end

 


Ich hoffe das Minimalbeispiel ist ausreichend. Ich möchte, dass nur die Symbole gelabelt werden. Das komische ist, wenn ich das 'p=' vor dem Plot-Befehl entferne, Funktioniert das Ganze. Allerdings unterscheidet er dann nicht mehr zwischen dem Lineplot und dem Symbolplot und schreibt mir murks in die Legende. Wenn ich beides in ein Plotbefehl mache geht es aber dann kann ich wie oben beschrieben die LineWidth der Marker nicht mehr seperat von der LineWidth der Linien einstellen (oder doch irgendwie?) Ich habe schon viele Varianten ausprobiert, aber irgendwie Funktioniert nichts so richtig. Das Anlegen der Label-Strings funktioniert, allerdings nimmt Matlab immer nur den letzten Eintrag in die Legende. Ich vermute es liegt einfach daran, dass er den Eintrag mit jedem Schleifendurchgang überschreibt. Wie kann ich das verhindern? Danke schon mal für Hinweise
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2018, 14:41     Titel:
  Antworten mit Zitat      
Hallo,

wenn du mit einer Legende mehrere Plots beschriften willst, musst du auch alle Plot-Handles angeben, z.B.
Code:


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
 
Litlebuda
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 14:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort! Ich hatte deine Lösung vorher schon einmal probiert. Leider spuckt mir Matlab dann folgenden Fehler aus:

Error using legend>process_inputs (line 582)
Invalid argument. Type 'help legend' for more information.

Error in legend>make_legend (line 340)
[autoupdate,orient,location,position,children,listen,strings,propargs] = process_inputs(ha,argin); %#ok

Error in legend (line 294)
make_legend(ha,args(arg:end),version);

Error in GridStudy6_CaseA (line 36)
l1=legend(p,legend_strings,'Location','South');


komischerweise funktioniert das Ganze für die ersten beiden Einträge. Danach macht er wieder murks (vgl. angehängter Screenshot). Aus irgendeinem Grund kommt er nur bis zum dritten Eintrag. Laut Workspace ist 'legend_strings' eine 1x3 cell und 'p' eine 1x3 Graphics.

Nachtrag: Wenn ich den legend-Befehl auskommentiere, dann läuft der Code Fehlerfrei durch. Allerdings ist p dann immer noch 1x3. Da fehlt mir irgendwie das Verständnis. Müsste p nicht 1x5 sein wenn i=1:5???

ChlorellTest.JPG
 Beschreibung:

Download
 Dateiname:  ChlorellTest.JPG
 Dateigröße:  59.08 KB
 Heruntergeladen:  275 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2018, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

poste doch bitte den aktuellen Code, am besten ein lauffähiges Beispiel.
Beim originalen Code stimmte ja schon die Reihenfolge der Argumente für legend nicht. Jetzt erstellst du p anders, die entscheidende Frage ist: wie.

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
 
Litlebuda
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 15:08     Titel:
  Antworten mit Zitat      
Das mit dem Lauffähigen Code ist schwierig, da ich hier keine .csv dateien hochladen kann. Hier noch mal der aktuelle Code

Code:


color=lines(5);
sym={'d','s','o','*','p'};

for j=[1 2]
   
for i=1:5
   
   
    filename=['ref',num2str(i),'_A_L',num2str(j),'.csv'];
   
    data=csvread(filename,7,0);
   
   
    if j==1
   
    figure(1)
    %Chlorella MassFraction Fall A, Line 1
    hold on
   
    p(i)=plot(data(1:4:end,3),data(1:4:end,4),'Marker',sym{i},'LineWidth',1.5,'LineStyle','none','Color','k');
    h(i)=plot(data(:,3),data(:,4),'LineStyle','-','LineWidth',1,'Color','k');
    legend_strings{i}=['Ref.level: ',num2str(i)];
    l=legend(p,legend_strings,'Location','South');
   
    title('Chlorella MassFraction, Fall A, Line 1','FontSize',16,'FontWeight','bold')
    xlabel('Z-Koordinate [m]','FontSize',16,'FontWeight','bold')
    ylabel('MassFractionChlorella','FontSize',16,'FontWeight','bold')
    box on
    xlim([-0.003 0.003])
    set(gca,'FontSize',16,'FontWeight','bold','XGrid','off','YGrid','on')
       
    %set(l,'FontSize',12)
   
    else
       
    figure(2)
    %Chlorella MassFraction Fall A, Line 2
    hold on
    plot(data(:,3),data(:,4),'LineWidth',1.5,'color',color(i,:))
    title('Chlorella MassFraction, Fall A, Line 2','FontSize',16,'FontWeight','bold')
    xlabel('Z-Koordinate [m]','FontSize',16,'FontWeight','bold')
    ylabel('MassFractionChlorella','FontSize',16,'FontWeight','bold')
    box on
    xlim([-0.003 0.003])
    set(gca,'FontSize',16,'FontWeight','bold','XGrid','off','YGrid','on')
   legend_strings{i}=['Ref.level: ',num2str(i)];
   l=legend('location','south',legend_strings);
    set(l,'FontSize',12)
   
    end

end
 


'data' ist eine 99x7 Matrix, die sich mit jedem Schleifendurchlauf ändert, da sie aus verschiedenen .csv Datein eingelesen wird. Das ist jetzt der Code, der den Plot (figure(1) von dem Screenshot produziert, den ich an mein letzten Post angehängt habe.

Gruß Litlebuda
Private Nachricht senden Benutzer-Profile anzeigen
 
Litlebuda
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 15:25     Titel:
  Antworten mit Zitat      
Danke für deine Hilfe Harald. Ich habe mein Problem gelöst. Ich hatte weiter unten den Variablennamen p doppelt vergeben. Bitte keine Ohrfeigen, das mache ich schon selber! Einen sonnigen Samstag!

Gruß Litlebuda
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2018, 15:48     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das mit dem Lauffähigen Code ist schwierig, da ich hier keine .csv dateien hochladen kann

Im Zweifelsfall zippen, dann geht's. Alternativ tun's auch Zufallszahlen. Ebenfalls einen schönen Tag ;)

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
 
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.