n個のcsvデータをグラフにして重ね合わせ、その後グラフの色を変更する方法ついて(n個のうち、1個だけ色を変えたい)
23 次查看(过去 30 天)
显示 更早的评论
初歩的な質問で申し訳ありません。
現在フォルダ内の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 个评论
采纳的回答
交感神経優位なあかべぇ
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
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
更多回答(1 个)
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';
よろしければこちらもご参照ください
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!