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

Viele Plots in einem Figure(zu wenig Farben)+Legende anfüge

 

Alexfromgalax
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2019, 16:39     Titel: Viele Plots in einem Figure(zu wenig Farben)+Legende anfüge
  Antworten mit Zitat      
Hallo Leute,
ich hab nochmal ein Problem. Ich möchte in meinem Programm eine variierende Anzahl von Variablen plotten.Es können zwischen 1 und 25 Plotts werden, die übereinander in eine Figure geplottet werden sollen. Zwecks übersichtlichkeit natürlich alle in einer eigenen Farbe und mittels Legende eindeutig zuweisbar. Meine Idee war ein Variable mit 25 verschiedenen Farbabkürzungen zu füllen und diese dann immer in der plot Schleife um eine Farbe weiter zu wechseln. Leider sind in der Matlab Hilfe für plot nur einige Farbabkürzungen angegeben. Habt ihr eine Idee wie man noch mehr Farben bekommt oder wie man das Problem vielleicht anders angehen kann?
Meine zweite Frage bezieht sich auf das Thema Legende.
Es gibt in meiner GUI mehrere Axes. Ich habe versucht eine Legende mit diesem Befehl einzufügen:
Code:
set(handles.axes4, 'legend',CarList{CL});

Leider kommt dann immer dieser Fehler:
Error using matlab.graphics.axis.Axes/set
You cannot set the read-only property 'Legend' of Axes.

Was mache ich falsch?
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: 11.09.2019, 16:54     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Farben in einem nx3-Array colors(jede Zeile enthält einen RGB-Wert) abgespeichert sind:
Code:
for k = 1:n
plot(…, 'Color', colors(k, :))


Statt mit dem set-Befehl zu arbeiten würde ich das versuchen:
Code:
legend(handles.axes4, CarList{CL})

Dazu sollte CarList{CL} selbst wieder ein Cell Array mit chars sein.

Ich finde übrigens App Designer deutlich angenehmer in der Handhabung als GUIDE, mit dem du vermutlich arbeitest (handles.axes…).

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2019, 09:28     Titel:
  Antworten mit Zitat      
Ich verstehe nicht ganz was du mit nx3-Array meinst. Kannst du mir das genauer erklären?
Das mit der Legende funkioniert jetzt durch deinen Tipp, allerdings plotte ich Punktewolken und in der Legende werden mir dann neben jedem Fahrzeug nur ganz kleine Punkte angezeigt. gibt es da die eine Möglichkeit ein Linie anzuzeigen, damit die Fabe erkennbar wird?
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: 12.09.2019, 09:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich verstehe nicht ganz was du mit nx3-Array meinst.

Wenn du z.B. 25 Farben hast, dann ein 25x3-Array. Jede Zeile ist der RGB-Code einer Farbe, skaliert auf [0, 1].

Zitat:
gibt es da die eine Möglichkeit ein Linie anzuzeigen, damit die Fabe erkennbar wird?

Kann man sicher hinbiegen, muss man aber evtl. etwas basteln. Ich kann mir z.B. vorstellen, eine Linie mit NaN zu plotten und die Legende für diese anzuzeigen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2019, 10:07     Titel:
  Antworten mit Zitat      
Jetzt hab ich es verstanden. Werde mich die Tage mal ran machen und eine Lösung suchen. Die Idee mit den NaN ist echt gut. So werde ich es wohl machen. Vielen Dank für die guten Tipps.
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: 12.09.2019, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

hier eben noch ein kleines Minimalbeispiel für den zweiten Teil:
Code:
x = randn(1,10000);
y = randn(1,10000);
scatter(x, y, 1, 'b')
hold on
p = plot(NaN, NaN, 'b-');
hold off
legend(p, 'blau')


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2019, 10:41     Titel:
  Antworten mit Zitat      
Ich hab jetzt am Wochenende ein wenig herum probiert und bin schon ein gutes Stück weiter gekommen.
Code:
%create Array with different rgb codes for more colours to plot

colors =[ 0,255 ,0; 0,0,255;255,255,0;0,255,255;255,0,255;128,128,128;128,128,0;128,0,0;220,20,60;...
    255,69,0;154,205,50;124,252,0;144,238,144;0,250,154;25,25,112;75,0,130;0,0,0];

CarList= get(handles.pushbutton_Auswahlmerken,'Userdata');

%Plot Cam  In in axes1
ylabel(handles.axes1,'CAM In [°] ');
xlabel(handles.axes1,'Drehzahl  [1/min]');
plot(handles.axes1,RaceMatrixfinal{CL}{z}(:,RPM),RaceMatrixfinal{CL}{z}(:,CamIn),'Color',1/255*colors(CL,:));

%Plot Cam  Out in axes2
ylabel(handles.axes2,'CAM Out [°] ');
xlabel(handles.axes2,'Drehzahl  [1/min]');
plot(handles.axes2,RaceMatrixfinal{CL}{z}(:,RPM),RaceMatrixfinal{CL}{z}(:,CamOut),'Color',1/255*colors(CL,:));

%Plot IgnAdv in axes3
ylabel(handles.axes3,'IgnAdv [°] ');
xlabel(handles.axes3,'Drehzahl  [1/min]');
plot(handles.axes3,RaceMatrixfinal{CL}{z}(:,RPM),RaceMatrixfinal{CL}{z}(:,IgnAdv),'Color',1/255*colors(CL,:));

%Plot Lambda in axes4
ylabel(handles.axes4,'Lambda');
xlabel(handles.axes4,'Drehzahl  [1/min]');
plot(handles.axes4,RaceMatrixfinal{CL}{z}(:,RPM),RaceMatrixfinal{CL}{z}(:,LambdaL),'Color',1/255*colors(CL,:));

p= plot(handles.axes4,NaN, NaN, 'b-');
legend(p, CarList(CL))
 


Der Farbwechsel funktioniert prima. Allerdings weiß ich jetzt nciht genau wo ich beim plot Befehl die Ausgabe ils Punktewolke einfügen kann. Immer wenn ich '.' in den Befehl beifüge kommt der Fehler: Error using plot
Data must be a single matrix Y or a list of pairs X,Y.


Das Problem mit der Legende funktioniert im Grunde eigentlcih auch. Allerdings wird mir am Ende immer nur der letzte Autoname angezeigt. Wie schaffe ich es, dass die Legende sich in der Schleife nicht überschreibt sondern nur erweitert um den nächsten plot?
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: 16.09.2019, 11:05     Titel:
  Antworten mit Zitat      
Hallo,

wie wird p denn belegt?

M.E. muss jeder der plot-Befehle so aufgebaut sein:
Code:
plot(handles.axes1,RaceMatrixfinal{CL}{z}(:,RPM),RaceMatrixfinal{CL}{z}(:,CamIn),'.', 'Color',1/255*colors(CL,:));
p(1)= plot(handles.axes1,NaN, NaN,),'Color',1/255*colors(CL,:)); % passende Farbe

Generell sind ausführbare Beispiele hilfreich...

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2019, 11:37     Titel:
  Antworten mit Zitat      
Das mit dem plotten klappt jetzt. Ich muss mich wohl irgendwie verschrieben haben. Allerdings wird die Legende immernoch überschrieben.
Code:
p(CL) =  plot(handles.axes4,NaN, NaN,'Color',1/255*colors(CL,:));
legend(p(CL),CarList(CL));

Ich habe jetzt mal versucht p mit dem Schleifenzähler CL zu belegen. In der Legende bekommt der plot p dann den passenden Autonamen aus CL zugewiesen. Das funktioniert auch soweit, bis die Schleife auf end kommt. Dann steht nur noch der aktuelle plot da mit der richtigen Farbe und Bezeichnung.
Leider kann ich dir im Moment kein Beispiel hochladen.
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: 16.09.2019, 13:16     Titel:
  Antworten mit Zitat      
Hallo,

die Legende soll ja für alle auf einmal gemacht werden, also eher am Ende
Code:


Alternativ kannst du bei den NaN-Plots die Eigenschaft Displayname setzen und am Ende
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
 
Alexfromgalax
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2019, 14:18     Titel:
  Antworten mit Zitat      
Leider funktioniert es immernoch nicht. Ich verstehe einfach niht woran es liegt. Ich hab dir mal ein kurzes Beispiel erstellt mit dem passenden Figure und der zugehörigen Racematrixfinal. Vielleicht kannst du da mal drüber schauen und erkennst den Fehler. Ich komme einfach nicht weiter.

RaceMatrixfinal.mat
 Beschreibung:

Download
 Dateiname:  RaceMatrixfinal.mat
 Dateigröße:  2.79 MB
 Heruntergeladen:  239 mal
AxesBeispiel.m
 Beschreibung:

Download
 Dateiname:  AxesBeispiel.m
 Dateigröße:  4.18 KB
 Heruntergeladen:  215 mal
AxesBeispiel.fig
 Beschreibung:

Download
 Dateiname:  AxesBeispiel.fig
 Dateigröße:  34.33 KB
 Heruntergeladen:  211 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: 16.09.2019, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

wenn du mehrere Plots in ein Koordinatensystem bringen willst, brauchst du
Code:


Ansonsten werden Plots überschrieben und die Legende kann nicht mehr zugeordnet werden.

Grüße,
Harald

AxesBeispiel.m
 Beschreibung:

Download
 Dateiname:  AxesBeispiel.m
 Dateigröße:  4.42 KB
 Heruntergeladen:  215 mal

_________________

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2019, 14:50     Titel:
  Antworten mit Zitat      
ich habe zu beginn meines vollständigen Code alle Axes auf Hold on gesetzt. Im Beispiel habe ich den Teil wohl abgeschnitten.
Wenn ich jetzt wie du mir geschrieben hast am Ende :
Code:
hold(handles.axes1, 'off')
hold(handles.axes2, 'off')
hold(handles.axes3, 'off')
hold(handles.axes4, 'off')
hold(handles.axes5, 'off')
hold(handles.axes6, 'off')
hold(handles.axes7, 'off')
legend(p,CarList);
 

einsetzte funktioniert alles Prima. Irgendwie verstehe ich allerdings nicht genau warum. Hold muss doch an sein damit es nicht überschrieben wird Question
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: 16.09.2019, 15:07     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht noch eine andere Kleinigkeit?
Wenn's jetzt funktioniert, ist es ja gut.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2019, 15:09     Titel:
  Antworten mit Zitat      
Ja jetzt klappt es auf jeden Fall so wie ich es wollte. Ich danke dir wirklich sehr für die Hilfe.
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.