n個のcsvデータをグラフにして重ね合わせ、その後グラフの色を変更する方法ついて(n個のうち、1個だけ色を変えたい)
19 views (last 30 days)
Show older comments
初歩的な質問で申し訳ありません。
現在フォルダ内の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番目のグラフを赤色に変更する
上記のようなことは可能なのでしょうか。
ご検討頂けると幸いです。
宜しくお願い致します。
0 Comments
Accepted Answer
交感神経優位なあかべぇ
on 8 Dec 2022
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
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
More Answers (1)
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';
よろしければこちらもご参照ください
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!