n個のcsvデータを​グラフにして重ね合わ​せ、その後グラフの色​を変更する方法ついて​(n個のうち、1個だ​け色を変えたい)

55 ビュー (過去 30 日間)
cho hunseki
cho hunseki 2022 年 12 月 8 日
コメント済み: cho hunseki 2022 年 12 月 9 日
初歩的な質問で申し訳ありません。
現在フォルダ内のn個のcsvデータをグラフ化し、重ね合わせる事を行っております。
そのコードとしては、以下のように行っています。
(2行n列のcsvデータで、1行目のみを抜き出しております)
list = dir('*.csv');
figure
hold on
for ii = 1:length(list)
a = readmatrix(list(ii).name);
plot(a(1,:))
end
このコードだと、n個のグラフを重ねることは可能ですが、n個のグラフがそれぞれ異なる色となっております。
そこで、グラフの色を変更する場合、例えばn個全てを同じ色にする場合は、以下のようにすることで対応できました。
(全てのグラフを青にしております。)
list = dir('*.csv');
figure
hold on
for ii = 1:length(list)
a = readmatrix(list(ii).name);
plot(a(1,:),'b');
end
上記経過があるのですが、次にやりたいこととして、
●n個のグラフのうち任意の1つのグラフを色を変更することは可能でしょうか。
例:n個の青色のグラフのうち、50番目のグラフのみを赤色に変更する
●n個のグラフのうち、任意の間のグラフの色を変更することは可能でしょうか。
例:n個の青色のグラフのうち、50番目~60番目のグラフを赤色に変更する
上記のようなことは可能なのでしょうか。
ご検討頂けると幸いです。
宜しくお願い致します。

採用された回答

交感神経優位なあかべぇ
交感神経優位なあかべぇ 2022 年 12 月 8 日
for 文中に条件分岐をいれてはどうでしょうか?
例として、10本の線の5,6本目を赤にします。
a = [repmat(0, 10, 1), (0:9)'];
figure;
hold on;
for ii = 1 : size(a, 1)
if ii >= 5 && ii <= 6
color = 'red';
else
color = 'blue';
end
plot(a(ii, :), color);
end
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 12 月 8 日
新たにプロットを作る場合はこれが正解ですね。でもファイルに関して課題がある事に気付きました。
正弦波を少しずつずらし、CSVファイル’test1.csv’~’test60.csv’にデータを収めました。
n = 60;
for ii = 1:n
x = 0:pi/10:2*pi;
y = sin(x + 2*pi*ii/n);
writematrix([x;y],['test' num2str(ii) '.csv']);
end % 例題としてのサンプルファイル60個を準備した
下記のプログラムで少しずつずれた正弦波11本(50番目~60番目)が赤くなる事を期待したのですが、まばらになってしまいました。理由はdir関数で抽出したファイル名リストが期待する順序にならなかったからです。あくまでこれは期待通りの順序にならなかった例で、要は@cho hunsekiさんがdir関数で抽出したファイル名リストの50番目~60番目に「期待する波形が期待する順序で並ぶか否か」です。
list = dir('*.csv');
figure
hold on
for ii = 1:length(list)
a = readmatrix(list(ii).name);
if ii >= 50 && ii <= 60 % 例:n個の青色のグラフのうち、50番目~60番目のグラフを赤色に変更する
plot(a(1,:),a(2,:),'r','LineWidth',2); % ついでに太さも変更した
else
plot(a(1,:),a(2,:),'b');
end
end
cho hunseki
cho hunseki 2022 年 12 月 9 日
交感神経優位なあかべぇさん
Atsushi uenoさん
ご回答頂きありがとうございます。
もともとのコードを活かす形で具体的にご教授頂きありがとうございました。
試してみると、やろうとしていたことが出来ました。
本当にありがとうございました。

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

その他の回答 (1 件)

Hiroshi Iwamura
Hiroshi Iwamura 2022 年 12 月 8 日
編集済み: Hiroshi Iwamura 2022 年 12 月 8 日
plot をグラフィックオブジェクトに取っておく方法もあります。
後から属性やデータ自体も変えられます。
また、Color の4次元目を指定すると、透明度も変えられます。
th = 0:pi/20:2*pi;
y = sin(th);
alpha = 0:0.2:1;
N = length(alpha);
p = gobjects(1,N); % initialize graphic object matrix
cnt = 1;
for a = alpha
p(cnt) = plot(th, (y+a),'b');
if cnt == 1; hold on; end
cnt = cnt + 1;
end
hold off
pause
p(1).Color = [p(1).Color 0.2];
p(1).LineWidth = 2;
p(2).Color = [0.87 0 0];
p(3).LineWidth = 2;
p(end).Color = [0.87 0.5 0];
p(end).YData = p(end).YData + 0.2;
p(end).LineStyle = '--';
p(end).Marker = 'o';
よろしければこちらもご参照ください
 
  1 件のコメント
cho hunseki
cho hunseki 2022 年 12 月 9 日
Hiroshi Iwamuraさん
ご回答頂きありがとうございました。
様々な手法があり、大変勉強になりました。
ありがとうございました。

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

カテゴリ

Help Center および File Exchange印刷と保存 についてさらに検索

Community Treasure Hunt

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

Start Hunting!