Boxchartで各Boxの色を変えたい
13 views (last 30 days)
Show older comments
現在、以下のスクリプトを作成しBoxchartを作成しています。各Boxの色を変えたいのですが(例えば、左から赤・青・緑・紫)、うまくできません。Boxplotではなく、Boxchartでの方法を教えていただきたいです。よろしくお願いいたします。
tbl1 = readtable('File.csv');%フォルダー内から呼び出し(複数のシートに分ける必要)
TimeOrder = {'A','B','C','D'};%横軸を定義
tbl1.Time = categorical(tbl1.Time,TimeOrder);%データを時間ごとで分類
boxchart(tbl1.Time,tbl1.Variable,'GroupByColor',tbl1.Protocol)%BoxChartの作成
b1 = boxchart(tbl1.Time,tbl1.Variable,'GroupByColor',tbl1.Protocol) %BoxChart格納
meanValue1 = groupsummary(tbl1.Varible,tbl1.Time,'mean');
hold on
plot(meanValue1,'-ok')
plot1 = plot(meanValue1,'-ok')
plot1.LineWidth = 1;
hold off
title('%TQ');
b1.BoxFaceColor = '#A2142F'; %ボックス色の変更
b1.MarkerStyle = 'none'; %マーカースタイルの変更
ylim([0 100]) %y軸の範囲を変更
b1 = gca;%フォントサイズの変更
b1.FontSize = 14;
b1.FontName = 'Times New Roman';%フォントタイプの変更
b1.TickDir = 'out'%メモリ線の位置
b1.FontWeight = 'bold';%ボールド体に変更
b1.XTickLabel = [];
yticks(0:20:100);
b1.LineWidth = 1; % 軸の枠線の太さを設定
b1.XRuler.Axle.LineWidth = 1; % x軸のメモリの太さを設定
b1.YRuler.Axle.LineWidth = 1
2 Comments
Kojiro Saito
on 28 Jul 2024
再現できるデータがあればコミュニティでも回答しやすくなると思いますが、色データで与えているtbl1.Protocolにはどのようなデータが含まれていますか?
Accepted Answer
Kojiro Saito
on 29 Jul 2024
共有いただいたFile.csvのProtocolはデータがMのみなので、GroupByColorで指定しても1色になってしまいます。
GroupByColorでtbl1.Timeを指定すればTimeの値で色分けされます。
元のFile.csvではカラム名がVaiableになっていたので、Variableに変更したファイルを添付しています。
colororder関数を使って左から赤、青、緑、紫のHEX値を指定します。
tbl1 = readtable('File.csv');%フォルダー内から呼び出し(複数のシートに分ける必要)
TimeOrder = {'A','B','C','D'};%横軸を定義
tbl1.Time = categorical(tbl1.Time,TimeOrder);%データを時間ごとで分類
b1 = boxchart(tbl1.Time,tbl1.Variable,'GroupByColor',tbl1.Time, 'MarkerStyle', 'none');
colororder(["#A2142F", "#0072BD", "#77AC30", "#7E2F8E"]); % 左から赤・青・緑・紫に変更
ただ、GroupByColorは同じX軸にデータ系列を複数プロットするために使われるため、X軸のA、B、C、Dの上にデータが表示されない問題があります。
boxchartではデータの中身毎に色を変えるのが現状サポートされていないので、複数回boxchartを実行することで色を替えられます。
for n=1:length(TimeOrder)
idx = tbl1.Time == TimeOrder{n};
boxchart(tbl1.Time(idx, :), tbl1.Variable(idx, :));
if n == 1
hold on
elseif n == length(TimeOrder)
hold off
end
end
colororder(["#A2142F", "#0072BD", "#77AC30", "#7E2F8E"]); % 左から赤・青・緑・紫に変更
title('%TQ');
ylim([0 100]) %y軸の範囲を変更
ax = gca;%フォントサイズの変更
ax.FontSize = 14;
ax.FontName = 'Times New Roman';%フォントタイプの変更
ax.FontWeight = 'bold';%ボールド体に変更
yticks(0:20:100);
ax.LineWidth = 1; % 軸の枠線の太さを設定
meanValue1 = groupsummary(tbl1.Variable,tbl1.Time,'mean');
hold on
plot1 = plot(categorical(TimeOrder), meanValue1,'-ok');
plot1.LineWidth = 1;
hold off
6 Comments
More Answers (0)
See Also
Categories
Find more on ビッグ データの処理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!