Boxchartで各Boxの色を変えたい

8 ビュー (過去 30 日間)
Raki
Raki 2024 年 7 月 26 日
コメント済み: Kojiro Saito 2024 年 7 月 31 日
現在、以下のスクリプトを作成し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
Kojiro Saito 2024 年 7 月 28 日
再現できるデータがあればコミュニティでも回答しやすくなると思いますが、色データで与えているtbl1.Protocolにはどのようなデータが含まれていますか?
Raki
Raki 2024 年 7 月 29 日
ご質問ありがとうございます。データファイルを添付しておりますので、ご確認いただけますと幸いです。
また、各Boxに個人データをプロットする方法ももしご存じであれば、ご教示いただきたいです。
よろしくお願いいたします。

サインインしてコメントする。

採用された回答

Kojiro Saito
Kojiro Saito 2024 年 7 月 29 日
共有いただいたFile.csvのProtocolはデータがMのみなので、GroupByColorで指定しても1色になってしまいます。
GroupByColortbl1.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 件のコメント
Raki
Raki 2024 年 7 月 31 日
無事作図することが出来ました。本当にありがとうございました。
Kojiro Saito
Kojiro Saito 2024 年 7 月 31 日
@Rakiさん、解決して良かったです。
最後に、回答の採用ボタンを押していただけますでしょうか。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeビッグ データの処理 についてさらに検索

製品


リリース

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!