Frage

Wenn Sie setzen DefaultAxesColorOrder und DefaultAxesLineStyleOrder MATLAB wird zuerst mit dem ersten Stil alle Farben durchlaufen, dann wieder durch alle Farben mit dem zweiten Stil und so weiter.

Sieh dir das an Dokumentation oder Verwandte Frage.

Was ich gerne tun möchte, ist Farbreihenfolge und Stilreihenfolge festzulegen, um unabhängig angewendet zu werden.

Zum Beispiel, wenn ich festgelegt habe DefaultAxesColorOrder zu [1 0 0; 0 1 0; 0 0 1] und DefaultAxesLineStyleOrder zu '-|--|:', die Linien werden sein 'r-','g-','b-','r--','g--','b--','r:','g:','b:'. Ich möchte Zeilen sein 'r-','g--','b:'.

War es hilfreich?

Lösung

Ich sehe keinen Weg, dies direkt aus der Box zu tun. Der unkomplizierte Weg besteht darin, die Farbe/den Stil für jede Zeile manuell einzustellen.

Hier ist eine automatisierte Lösung. Beginnen wir mit einem Beispiel aus der Dokumentation:

%# defaults are set sometime before
set(0, 'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1], ...
      'DefaultAxesLineStyleOrder','-|--|:')

%# do plotting as usual
t = 0:pi/20:2*pi;
a = zeros(length(t),9);
for i = 1:9
    a(:,i) = sin(t-i/5)';
end
h = plot(t,a);

Wie Sie in Ihrer Frage erklärt haben, besteht das Standardverhalten darin, zuerst die Farben und dann die Linienstile durchzuführen. Wenn Sie sie unabhängig beantragen möchten, versuchen Sie es mit Folgendem:

c = num2cell(get(0,'DefaultAxesColorOrder'),2);
l = cellstr(get(0,'DefaultAxesLineStyleOrder'));
set(h, {'Color'}, c(rem((1:numel(h))-1,numel(c))+1), ...
    {'LineStyle'}, l(rem((1:numel(h))-1,numel(l))+1))

Möglicherweise können Sie diese in einer Funktion für einen bequemen Zugriff einwickeln (Sie müssen die Griffe weiterhin an die Grafikobjekte der Linien übergeben):

function applyColorLineStyleIndependently(h)
    %# ...
end

enter image description here

Andere Tipps

Amros Ansatz funktioniert gut. Nur als Notiz müssen Sie die Standardeinstellungen dafür nicht festlegen. Sie können so etwas tun

col = mycolors(); % defines RGB colors scaled to [0,1]

i = 1;
c(:,i) = col.royal_blue; i = i+1;
c(:,i) = col.crimson; i = i+1;
c(:,i) = col.medium_sea_green; i = i+1;
c(:,i) = col.coral; i = i+1;
c(:,i) = col.dark_magenta; i = i+1;

colord = num2cell(c',2);
lineord = {'-' '--' '-.'}'; 

set(h,{'Color'}, colord(rem((1:numel(h))-1,numel(colord))+1), ...
      {'LineStyle'}, lineord(rem((1:numel(h))-1,numel(lineord))+1))
set(h,'LineWidth',2)

Bearbeiten: Die Funktion mycolors () ist zu Hause gemacht. Ich definiere

colors.maroon = [128,0,0];
colors.dark_red = [139,0,0];
colors.brown = [165,42,42];
...

(Die Farbnamen stammen daraus http://www.rapidtables.com/web/color/rgb_color.htm). Dann skalle ich sie über [0,1] über

c = fieldnames(colors);
for i = 1:numel(c)
    colors.(c{i}) = colors.(c{i})/255;
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top