CSVファイルの時系列演算

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

10 commentaires

Keita Abe
Keita Abe le 12 Oct 2022
plot(x,y)のあとに hold onと入力すると重ね書きができるのですべての点の折れ線グラフのグラフ化も可能と思います。
t = [0:10];
x = [sin(t); cos(t)];
figure;
plot(t,x(1,:))
hold on
plot(t,x(2,:))
海
le 12 Oct 2022
全ての点というのは1つのExcelの点の話でしょうか、それとも時系列的に、全てのExcelファイルの点をグラフ化出来るという事でしょうか?
Keita Abe
Keita Abe le 12 Oct 2022
1つのファイル内にあるエクセルの点でも可能ですし,複数のエクセルファイルからデータを集約して可視化することも可能です。
複数ファイルのインポートに関してはこちらのリンクが参考になるかもしれません。
海
le 13 Oct 2022
有益な情報本当にありがとうございます!
再度質問で恐縮なのですが、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,:))
Keita Abe
Keita Abe le 14 Oct 2022
例えばこんな感じでいかがでしょうか?複数ファイルの読み込みはこちらを参考にしました。
まずファイルのパスを取得します。
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)
海
le 14 Oct 2022
ありがとうございます!
本当に無知で恐縮なのですが、最後にplotをするときに、
table 変数名 't' が認識されません。
と表示されてしまいます。
tはどのようにプログラミングすればよろしいのでしょうか?
Keita Abe
Keita Abe le 14 Oct 2022
'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})
海
le 14 Oct 2022
ありがとうございます!
以下のようなファイルでも、同様のグラフを作ることは可能でしょうか?
Keita Abe
Keita Abe le 14 Oct 2022
時間が入っているセルは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})
海
le 17 Oct 2022
ありがとうござます!
写真のように、1点グラフ化することに成功しました!
本当に感謝いたします。
さらに全点をグラフ化するには、どうプログラミングしたらいいでしょうか?

Connectez-vous pour commenter.

 Réponse acceptée

Keita Abe
Keita Abe le 17 Oct 2022
Modifié(e) : Keita Abe le 18 Oct 2022

0 votes

最も愚直に書くとすれば以下のようにデータ取得に対して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 commentaire

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

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Version

R2020b

Community Treasure Hunt

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

Start Hunting!