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

20 views (last 30 days)
cho hunseki
cho hunseki on 8 Dec 2022
Commented: cho hunseki on 9 Dec 2022
初歩的な質問で申し訳ありません。
現在フォルダ内の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番目のグラフを赤色に変更する
上記のようなことは可能なのでしょうか。
ご検討頂けると幸いです。
宜しくお願い致します。

Accepted Answer

交感神経優位なあかべぇ
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 Comments
Atsushi Ueno
Atsushi Ueno on 8 Dec 2022
新たにプロットを作る場合はこれが正解ですね。でもファイルに関して課題がある事に気付きました。
正弦波を少しずつずらし、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 on 9 Dec 2022
交感神経優位なあかべぇさん
Atsushi uenoさん
ご回答頂きありがとうございます。
もともとのコードを活かす形で具体的にご教授頂きありがとうございました。
試してみると、やろうとしていたことが出来ました。
本当にありがとうございました。

Sign in to comment.

More Answers (1)

Hiroshi Iwamura
Hiroshi Iwamura on 8 Dec 2022
Edited: Hiroshi Iwamura on 8 Dec 2022
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 Comment
cho hunseki
cho hunseki on 9 Dec 2022
Hiroshi Iwamuraさん
ご回答頂きありがとうございました。
様々な手法があり、大変勉強になりました。
ありがとうございました。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!