Boxchartで各Boxの色を変えたい
8 ビュー (過去 30 日間)
古いコメントを表示
現在、以下のスクリプトを作成し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 件のコメント
Kojiro Saito
2024 年 7 月 28 日
再現できるデータがあればコミュニティでも回答しやすくなると思いますが、色データで与えているtbl1.Protocolにはどのようなデータが含まれていますか?
採用された回答
Kojiro Saito
2024 年 7 月 29 日
共有いただいた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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で ビッグ データの処理 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!