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

colormap('lines') liefert unterschiedliche Farbpalette

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.11.2014, 21:44     Titel: colormap('lines') liefert unterschiedliche Farbpalette
  Antworten mit Zitat      
Hallo goMatlab Forum,

ich habe ein Problem mit der Verwendung von

Code:

% erwartete Farbcodes
cmap = colormap('lines')
cmap =

         0         0    1.0000
         0    0.5000         0
    1.0000         0         0
...
 


Die Farbcodes in cmap entsprechen nicht der Doku vom Typ lines, so fern ich den Code in Funktion 1 zuerst ausführe. Dann ergeben sich folgende Farbcodes...

Code:

% nicht gewünscht
cmap = colormap('lines')
cmap =

    0.1294    1.0000    0.0118
    0.0745    0.4706    0.0235
    1.0000    0.4000         0
...
 



Plot in Funktion 1:

Code:

H = figure('Visible','off');
            Haxis = axis;
            set(Haxis, 'DefaultAxesColorOrder', cmapLaptimes);
            plot(Laptimes,'*');            
            % set xTick per Runden der Fahrerwechsel
            if Team.num_swaps > 0
                set(gca,'XTick',[1; unique(Team.laps_swap(:,2))]);
            end
            xlabel(langPack.lap,'FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            ylabel(langPack.lapTime,'FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            LegendNames = {key.colCodesLight,key.colCodesGreen,key.colCodesOrange,key.colCodesRed,key.colCodesDark};
            L = legend(LegendNames,'Location','NorthOutside','TextColor',[227/255 227/255 227/255]);
            set(L,'Color',[110/255 110/255 110/255]);
            set(H,'Color',[51/255 51/255 51/255]);
            set(gca,'Color',[51/255 51/255 51/255]);
            set(gca,'XColor',[227/255 227/255 227/255]);
            set(gca,'YColor',[227/255 227/255 227/255]);
            grid on;            
            y_ticks_sec = linspace(Team.fastest_lap - 1, max(Team.laptimes_sek) + 1,6);
            Ylabels = cell(length(y_ticks_sec),1);
            % Umrechnung von sec in MM:SS und wandeln in string
            for i=1:length(y_ticks_sec)
                Ylabels{i,1} = [num2str(fix([y_ticks_sec(i) / 60]),'%d'),':',num2str([mod(round(y_ticks_sec(i)),60)],'%.2d')];
            end
            set(gca,'YTickLabel',Ylabels);            
            xlim([1 Team.num_laps]);
            ylim([Team.fastest_lap - 1, max(Team.laptimes_sek) + 1]);
            % save chart as
            set(gcf, 'InvertHardCopy', 'off');
            print(H,'-dpng','-r100',fullfile(filepath,['Team' num2str(Team.finished_pos,'%.2d') '.png']));            
 


Plot in Funktion 2:

Code:

H = figure('Visible','off');
            cmap = colormap('lines');
            TeamNames = cell(size(leaders_sort,1),1);
            max_pos = 1;
            for i=1:size(leaders_sort,1)
                x_val = 0:1:Teams_gesamt(team_indx(i)).num_laps;
                y_val = cell2mat(Teams_gesamt(team_indx(i)).pos_lap(1:size(x_val,2)));
                max_pos = max([max_pos;y_val]);
                TeamNames{i,1} = Teams_gesamt(team_indx(i)).name;
                plot(x_val,y_val,'Color',cmap(i,:),'LineWidth',2);
                grid on;            
                hold on;          
            end
            hold off % reset hold state
            L = legend(TeamNames,'Location','SouthEast','TextColor',[227/255 227/255 227/255]);
            set(L,'Color',[110/255 110/255 110/255]);            
            xlabel(langPack.lap,'FontSize',12,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            ylabel(langPack.pos,'FontSize',12,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            xlim([1 Teams_gesamt(1).num_laps]);
            ylim([0 max_pos + 1]);
            set(gca,'YDir','reverse');
            set(H,'Color',[51/255 51/255 51/255]);
            set(gca,'Color',[51/255 51/255 51/255]);
            set(gca,'XColor',[227/255 227/255 227/255]);
            set(gca,'YColor',[227/255 227/255 227/255]);
            yticks = linspace(1,max_pos + 10 - mod(max_pos,10),10);
            set(gca,'YTick',round(yticks));
            xticks = linspace(1,Teams_gesamt(1).num_laps + 10 - mod(Teams_gesamt(1).num_laps,10),10);
            set(gca,'XTick',round(xticks));
            set(gcf, 'InvertHardCopy', 'off');
            print(H,'-dpng','-r100',fullfile(filepath,'leadersGraph'));
 


Es muss hier also irgendeine Beziehung zu den beiden Plots geben (über axis oder figure ???). Habe ich einmal den Code in Funktion 1 ausgeführt, erhalte ich bei erneutem Aufruf von cmap = colormap('lines') immer die gleichen falschen Farbcodes. Starte ich Matlab neu, kommentiere den Code in Funktion 1 aus, sind die Farbcodes in Funktion 2 richtig.

Vielen Dank für eure Hilfe!

Gruß DSP
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: 20.11.2014, 21:59     Titel:
  Antworten mit Zitat      
Hallo,

dokumentiert ist
Code:

und
Code:
cmap = colormap(handle)

aber nicht deine Syntax. Das würde ich also vermeiden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.11.2014, 23:00     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für den Hinweis. Ich habe die Doku zu dem Befehl schon x-mal durchgelesen, aber das ist mir nie aufgefallen Embarassed

Wer lesen kann ist klar im Vorteil Laughing

Ich habe meine Funktion 2 nun umgeschrieben, so dass die Plot-Vektoren in zwei Matrizen geschrieben werden und somit das hold on überflüssig ist. Dann kann ich die Funktion

Code:


auch richtig verwenden.

Code:

H = figure('Visible','off');            
            TeamNames = cell(size(leaders_sort,1),1);
            max_pos = 1;
            % preallocate
            x_val = NaN(Teams_gesamt(1).num_laps,size(leaders_sort,1));
            y_val = x_val;
            for i=1:size(leaders_sort,1)
                x_val(1:Teams_gesamt(team_indx(i)).num_laps+1,i) = 0:1:Teams_gesamt(team_indx(i)).num_laps;
                y_val(1:Teams_gesamt(team_indx(i)).num_laps+1,i) = cell2mat(Teams_gesamt(team_indx(i)).pos_lap(1:Teams_gesamt(team_indx(i)).num_laps+1));
                max_pos = max([max_pos;y_val(:,i)]);
                TeamNames{i,1} = Teams_gesamt(team_indx(i)).name;                
            end
            plot(x_val,y_val,'LineWidth',2);
            grid on;  
            colormap('lines');
            L = legend(TeamNames,'Location','SouthEast','TextColor',[227/255 227/255 227/255]);
            set(L,'Color',[110/255 110/255 110/255]);            
            xlabel(langPack.lap,'FontSize',12,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            ylabel(langPack.pos,'FontSize',12,'FontWeight','bold','Color',[227/255 227/255 227/255]);
            xlim([1 Teams_gesamt(1).num_laps]);
            ylim([0 max_pos + 1]);
            set(gca,'YDir','reverse');
            set(H,'Color',[51/255 51/255 51/255]);
            set(gca,'Color',[51/255 51/255 51/255]);
            set(gca,'XColor',[227/255 227/255 227/255]);
            set(gca,'YColor',[227/255 227/255 227/255]);
            yticks = linspace(1,max_pos + 10 - mod(max_pos,10),10);
            set(gca,'YTick',round(yticks));
            xticks = linspace(1,Teams_gesamt(1).num_laps + 10 - mod(Teams_gesamt(1).num_laps,10),10);
            set(gca,'XTick',round(xticks));
            set(gcf, 'InvertHardCopy', 'off');
            print(H,'-dpng','-r100',fullfile(filepath,'leadersGraph'));  
 



Allerdings löst das immer noch nicht mein Problem. Die Farben sind in diesem Plot nach wie vor falsch, so fern Funktion 1 vorher aufgerufen wird. Es muss ja irgendeinen Grund haben, warum selbst mein zweckentfremdender Aufruf schon unterschiedliche Farbcodes geliefert hat.
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: 20.11.2014, 23:04     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung: es bezieht sich auf
Code:
set(Haxis, 'DefaultAxesColorOrder', cmapLaptimes);

Damit veränderst du ja eine Default-Einstellung.

Ansonsten Vorschlag: den Code mal schrittweise entschlacken und schauen, woran es genau liegt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.11.2014, 23:19     Titel:
  Antworten mit Zitat      
Genau das ist das Problem. Und wie kann ich dann meine selbst definierten Farben in Funktion 1 der figure übergeben?

Code:
% RGB colorcodes Laptimes
cmapLaptimes = [33/255,1,3/255 ; 19/255,120/255,6/255 ; 1,102/255,0 ; 1,0,0 ; 143/255,4/255,4/255];

% funktioniert nicht
H = figure('Visible','off');
            plot(Laptimes,'*');
            colormap(cmapLaptimes);

% geht auch nicht
H = figure('Visible','off');
            plot(Laptimes,'*');
            colormap(H,cmapLaptimes);
 
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: 21.11.2014, 08:34     Titel:
  Antworten mit Zitat      
Hallo,

versuch bitte mal
Code:
set(Haxis, 'ColorOrder', cmapLaptimes);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.11.2014, 12:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

dann gibt es folgende Fehlermeldung:

Zitat:

Error creating file: Team01.html. Error using hg.GObject/set
The name 'ColorOrder' is not an accessible property for an instance of class 'root'.

Error in writing_Team_laps (line 164)
set(Haxis, 'ColorOrder', cmapLaptimes);


Folgende Befehle gehen auch nicht

Code:
colormap(gca,cmapLaptimes); % keine Übernahme der Farbcodes, ebenso...
set(gca, 'ColorOrder', cmapLaptimes);

colormap(axes,cmapLaptimes); % Fehler in der Darstellung, keine Datenpunkte zu sehen


Auch die Default Einstellungen nach dem Speichern der figure in Funktion 1 zu laden, behebt den Fehler der colormap in Fkt 2 nicht.

Code:

H = figure('Visible','off');          
            Haxis = axis;
            set(Haxis, 'DefaultAxesColorOrder', cmapLaptimes);
            plot(Laptimes,'*');
...
% save chart as
            set(gcf, 'InvertHardCopy', 'off');
            print(H,'-dpng','-r100',fullfile(filepath,['Team' num2str(Team.finished_pos,'%.2d') '.png']));            
            colormap('default'); % back to Default setting
            % oder
            colormap(H,'default'); % back to Default setting
            % oder
            colormap(gca,'default'); % back to Default setting
 
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: 21.11.2014, 13:13     Titel:
  Antworten mit Zitat      
Hallo,

nächster Versuch:

Code:
h = figure;
hAx = axes('nextplot', 'add');
set(hAx, 'ColorOrder', rand(8,3))
plot(hAx, rand(10,3))


Sorry, wenn ich mit Schnellschüssen nerve ;) Wenn's das auch noch nicht tut, bitte ein komplett reproduzierbares Beispiel zur Verfügung stellen. Und dann komme ich wirklich erst mit einem Vorschlag, der auch funktioniert - versprochen! :)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.11.2014, 13:44     Titel:
  Antworten mit Zitat      
Der Fehler mit colormap('lines') ist damit beseitigt. Allerdings gibt es nun einen neuen Fehler. Die durchgezogene Linie top und right sind mit meinem Code nicht mehr zu sehen (Siehe Bild). Evtl. wegen meiner Einteilung von X und Y Achse? Oder in diesem Bsp. nur gestrichelt.

Code:
% RGB colorcodes Laptimes
cmapLaptimes = [33/255,1,3/255 ; 19/255,120/255,6/255 ; 1,102/255,0 ; 1,0,0 ; 143/255,4/255,4/255];

h = figure;
hAx = axes('nextplot', 'add');
set(hAx, 'ColorOrder', cmapLaptimes)
plot(hAx, rand(20,5))

xlabel('Lap','FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
ylabel('Lap Time','FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
LegendNames = {'Daten1','Daten2','Daten3','Daten4','Daten5'};
L = legend(LegendNames,'Location','NorthOutside','TextColor',[227/255 227/255 227/255]);
set(L,'Color',[110/255 110/255 110/255]);
set(h,'Color',[51/255 51/255 51/255]);
set(hAx,'Color',[51/255 51/255 51/255]);
set(hAx,'XColor',[227/255 227/255 227/255]);
set(hAx,'YColor',[227/255 227/255 227/255]);
grid on;            
 


Hier ist der Rand ok, aber eben ohne eigene colormap:

Code:

h = figure;
plot(rand(20,5))

xlabel('Lap','FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
ylabel('Lap Time','FontSize',14,'FontWeight','bold','Color',[227/255 227/255 227/255]);
LegendNames = {'Daten1','Daten2','Daten3','Daten4','Daten5'};
L = legend(LegendNames,'Location','NorthOutside','TextColor',[227/255 227/255 227/255]);
set(L,'Color',[110/255 110/255 110/255]);
set(h,'Color',[51/255 51/255 51/255]);
set(gca,'Color',[51/255 51/255 51/255]);
set(gca,'XColor',[227/255 227/255 227/255]);
set(gca,'YColor',[227/255 227/255 227/255]);
grid on;  
 


Team01.png
 Beschreibung:

Download
 Dateiname:  Team01.png
 Dateigröße:  22.27 KB
 Heruntergeladen:  420 mal
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: 21.11.2014, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

interessant. Ein
Code:
set(hAx, 'Box', 'on')

am Ende hilft bei mir.

Hab's auch in R2014b getestet, da tritt das Problem gar nicht erst auf.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.11.2014, 17:08     Titel:
  Antworten mit Zitat      
Super, vielen Dank 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.