CSVファイルの時系列演算

1.のような、ある物質の温度変化の様子が1秒ごとに時系列的に並んでいるCSVデータが100枚ほどあります。このデータを用いて、2.のようなグラフを作りたいのですが、全ての点を折れ線グラフにすることは可能でしょうか?
写真のような物質の温度変化の様子を、1点1点全て折れ線グラフにしたいです。

10 个评论

plot(x,y)のあとに hold onと入力すると重ね書きができるのですべての点の折れ線グラフのグラフ化も可能と思います。
t = [0:10];
x = [sin(t); cos(t)];
figure;
plot(t,x(1,:))
hold on
plot(t,x(2,:))
海
2022-10-12
全ての点というのは1つのExcelの点の話でしょうか、それとも時系列的に、全てのExcelファイルの点をグラフ化出来るという事でしょうか?
Keita Abe
Keita Abe 2022-10-12
1つのファイル内にあるエクセルの点でも可能ですし,複数のエクセルファイルからデータを集約して可視化することも可能です。
複数ファイルのインポートに関してはこちらのリンクが参考になるかもしれません。
海
2022-10-13
有益な情報本当にありがとうございます!
再度質問で恐縮なのですが、file1.csv ,file2.csv ,file3.csv .......とCSVファイルが100個ほどあるのですが、これを下の式に当てはめるなら、どのようにプログラミングを書き直せばいいのかを教えていただきたいです。
t = [0:10];
x = [sin(t); cos(t)];
figure;
plot(t,x(1,:))
hold on
plot(t,x(2,:))
例えばこんな感じでいかがでしょうか?複数ファイルの読み込みはこちらを参考にしました。
まずファイルのパスを取得します。
clc;clear;
Pathlists = dir("*.csv");
Mylists = (struct2cell(Pathlists))';
Mylists = string(Mylists(:,1:2));
MyPath = fullfile(Mylists(:,2),Mylists(:,1));
次に取得したパスのCSVを読みこんで1つのテーブルに再成型します。
T = readtable(MyPath(1));
TT = repmat(T,length(MyPath),1);
for i = 1:length(MyPath)
T = readtable(MyPath(i));
TT(i,:) = T(1,:);
end
最後にプロットをします。
plot(TT.t,TT.A, TT.t,TT.B)
最終的なひとまとまりのコードはこちらです。
clc;clear;
Pathlists = dir("*.csv");
Mylists = (struct2cell(Pathlists))';
Mylists = string(Mylists(:,1:2));
MyPath = fullfile(Mylists(:,2),Mylists(:,1));
T = readtable(MyPath(1));
TT = repmat(T,length(MyPath),1);
for i = 1:length(MyPath)
T = readtable(MyPath(i));
TT(i,:) = T(1,:);
end
plot(TT.t,TT.A, TT.t,TT.B)
海
2022-10-14
ありがとうございます!
本当に無知で恐縮なのですが、最後にplotをするときに、
table 変数名 't' が認識されません。
と表示されてしまいます。
tはどのようにプログラミングすればよろしいのでしょうか?
't', 'A', 'B'は先ほど例としてアップロードしたCSVファイルのタイトル行に相当します。なので,実際に読み込ませたいCSVのタイトル(変数名)に変更してください。
変数名ではなく,列番号でplotのX,Y軸を指定したい場合はplotの部分を次に置き換えてください。
% plot(TT.t,TT.A, TT.t,TT.B)
plot(TT{:,1},TT{:,2}, TT{:,1},TT{:,3})
海
2022-10-14
ありがとうございます!
以下のようなファイルでも、同様のグラフを作ることは可能でしょうか?
時間が入っているセルはB3, 温度を取得したいセルがB9ならたとえば,for ループ 以下を次のように書き換えてみてはいかがでしょうか?
for i = 1:length(MyPath)
M = readmatrix(MyPath(i),'OutputType','string','NumHeaderLines',0);
time = datetime(M{3,2});
temperature = str2double(M{9,2});
TT{i,1} = time;
TT{i,2} = temperature;
end
TT = cell2table(TT);
plot(TT{:,1},TT{:,2})
海
2022-10-17
ありがとうござます!
写真のように、1点グラフ化することに成功しました!
本当に感謝いたします。
さらに全点をグラフ化するには、どうプログラミングしたらいいでしょうか?

请先登录,再进行评论。

 采纳的回答

Keita Abe
Keita Abe 2022-10-17
编辑:Keita Abe 2022-10-18

0 个投票

最も愚直に書くとすれば以下のようにデータ取得に対してfor ループを回せばできますね。
clc;clear;
Pathlists = dir("*.csv");
Mylists = (struct2cell(Pathlists))';
Mylists = string(Mylists(:,1:2));
MyPath = fullfile(Mylists(:,2),Mylists(:,1));
for i = 1:length(MyPath)
M = readmatrix(MyPath(i),'OutputType','string','NumHeaderLines',0);
time = datetime(M{3,2});
TT{i,1} = time;
column =0;
for j = 0:479
for k = 0:359
column = column+1;
temperature = str2double(M{9+k,2+j});
TT{i,1+column} = double(temperature);
end
end
end
column = 0;
TT = cell2table(TT);
figure;
plot(TT{:,1},TT{:,2:end})

1 个评论

海
2022-10-18
ありがとうございます!
無事全ての点をプロットすることが出来ました。
つたない質問ばかりしてしまい、申し訳ございませんでした。
本当に感謝してもしきれないです。ありがとうございました!

请先登录,再进行评论。

更多回答(0 个)

产品

版本

R2020b

Community Treasure Hunt

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

Start Hunting!