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

40 visualizaciones (últimos 30 días)
cho hunseki
cho hunseki el 8 de Dic. de 2022
Comentada: cho hunseki el 9 de Dic. de 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番目のグラフを赤色に変更する
上記のようなことは可能なのでしょうか。
ご検討頂けると幸いです。
宜しくお願い致します。

Respuesta aceptada

交感神経優位なあかべぇ
交感神経優位なあかべぇ el 8 de Dic. de 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 comentarios
Atsushi Ueno
Atsushi Ueno el 8 de Dic. de 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 el 9 de Dic. de 2022
交感神経優位なあかべぇさん
Atsushi uenoさん
ご回答頂きありがとうございます。
もともとのコードを活かす形で具体的にご教授頂きありがとうございました。
試してみると、やろうとしていたことが出来ました。
本当にありがとうございました。

Iniciar sesión para comentar.

Más respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre 印刷と保存 en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!