MATLABのplot関数で作成した図の色にいつも困っているので関数作成。
デフォルトのr g b c m y などで決める色はいつも微妙に感じるのでそれらを変えてみようという試みです。
テスト用データ作成
これをプロットしていきます。
t = 0:0.01:3; y = [sin(t);sin(t+0.1);sin(t+0.2);sin(t+0.3);sin(t+0.4);sin(t+0.5);sin(t+0.6);sin(t+0.7)];
Defaultカラー抽出
MATLABのデフォルトカラーはそこそこいい感じです。
RGB values for 2014b default colors - MATLAB Answers - MATLAB Central
次のコマンドでデフォルトカラーを確認できます。
get(groot,'DefaultAxesColorOrder')
先程のデータをプロットしましょう。
後ろの方は微妙ですが最初の4つくらいは普通に使える良い色合いだと思います。
RGB値は以下の通り。
0 0.4470 0.7410 % 青 0.8500 0.3250 0.0980 % 赤 0.9290 0.6940 0.1250 % 山吹色 0.4940 0.1840 0.5560 % 紫 0.4660 0.6740 0.1880 % 緑 0.3010 0.7450 0.9330 % シアン 0.6350 0.0780 0.1840 % 茶色
どんな色がいいか?
さて,そのうちどのような色を用いればいいかですが,matlabの設定はまぁ悪くないかなぁと思っています。
青b,赤r,黄色y,後紫pは採用かなぁ。緑gはちょっと考えます。
あと,使えそうな色はオレンジoでしょうか。
どんな色がいいかとかは論文が幾つかありますがこんなの読んでいる場合じゃねぇ。
http://www.perceptualedge.com/articles/visual_business_intelligence/rules_for_using_color.pdf
色変更
plotする時にRGBで色を指定するには以下のように書けばよいですが,正直言ってこんなの絶対書きたくない。
plot(t,y,'Color',[1., 0.5, 0.])
一方で,Figureハンドルを入手していれば次のように代入形式で後付けで色を変更できます。
自動化が出来そうな兆しが見えてきましたね。
fig=plot(t,y) fig(5).Color = [0,0.7,0] fig(6).Color = [1., 0.5, 0.]
これで緑を強めにしてオレンジを追加しました。
後は関数化するだけや。
http://oxon.hatenablog.com/entries/2010/11/19
自動色つけ関数
仕様:グラフハンドルと色ハンドルを同時に渡してその色に対応するようにグラフを変えるsetfigcolor()関数を作成。
setfigcolor(fig,'gbryo')
このように入れたい色を十番通り文字で指定すれば次のように変更可能ということ
なお,2つ目の色指定を全くしなければ関数内部で自動設定したデフォルトの色になります。
関数本体
function setfigcolor(hfig,colors,presetcolor) glen = size(hfig,1); colorcode = ['b';'r';'y';'p';'g';'o';'c';'k']; if nargin == 2 presetcolor = [0 0.4470 0.7410; % 青 0.8500 0.3250 0.0980; % 赤 0.9290 0.6940 0.1250; % 山吹色 0.4940 0.1840 0.5560; % 紫 0.4660 0.6740 0.1880; % 緑 1. 0.5, 0. ; % Orange 0.6350 0.0780 0.1840; % chacole 0 0 0]; %black elseif nargin == 1 presetcolor = [0 0.4470 0.7410; % 青 0.8500 0.3250 0.0980; % 赤 0.9290 0.6940 0.1250; % 山吹色 0.4940 0.1840 0.5560; % 紫 0.4660 0.6740 0.1880; % 緑 1. 0.5, 0. ; % Orange 0.6350 0.0780 0.1840; % chacole 0 0 0]; %black colors = colorcode'; end len=length(colors); % set colors for i=1:min(glen,len) n = find(colorcode== colors(i)); hfig(i).Color = presetcolor(n,:); end end
色盲用colormap
[ Wong,2011 ]の論文に依ると次のカラーマップが色盲用には見やすいようです。
Points of view: Color blindness | Nature Methods
presetcolor = [ 0,0,0; 230,159,0; 86,180,233; 0,158,115; 240,228,66; 0,114,178; 213,94,0; 204,121,167]/255.0;
plotは以下のようになりますが,黒がTopなのは賛否両論ありそうです。
順番変えてもいいのかなぁ。