MATLAB:ラインの色とスタイルの順序を並行して適用するように設定します

StackOverflow https://stackoverflow.com/questions/7326009

質問

設定するとき DefaultAxesColorOrderDefaultAxesLineStyleOrder Matlabは、最初に最初のスタイルですべての色をサイクリングし、次に2番目のスタイルなどのすべての色を再び繰り返します。

これを参照してください ドキュメンテーション また 関連する質問.

私がやりたいのは、独立して適用される色の順序とスタイルの順序を設定することです。

たとえば、設定した場合 DefaultAxesColorOrder[1 0 0; 0 1 0; 0 0 1]DefaultAxesLineStyleOrder'-|--|:', 、線はなります 'r-','g-','b-','r--','g--','b--','r:','g:','b:'. 。ラインになりたいです 'r-','g--','b:'.

役に立ちましたか?

解決

これを直接箱から出して行う方法はありません。簡単な方法は、各行の色/スタイルを手動で設定することです。

より自動化されたソリューションです。ドキュメントから取得した例から始めましょう。

%# 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);

質問で説明したように、デフォルトの動作は、最初に色をサイクリングし、次にラインスタイルをサイクリングすることです。独立して適用したい場合は、次のことを試してください。

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

便利なアクセスのためにそれを関数でラップすることができます(まだハンドルをライングラフィックオブジェクトに渡す必要があります):

function applyColorLineStyleIndependently(h)
    %# ...
end

enter image description here

他のヒント

Amroのアプローチはうまく機能します。メモとして、これを行うためにデフォルトを設定する必要はありません。あなたはこのようなことをすることができます

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)

編集:myColors()関数は自家製です。定義します

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

(カラー名はこれからです http://www.rapidtables.com/web/color/rgb_color.htm)。次に、[0,1]にスケーリングします

c = fieldnames(colors);
for i = 1:numel(c)
    colors.(c{i}) = colors.(c{i})/255;
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top