コードはコードブロックに入れて書きましょうよ。
```python
print('The best way to log and share programmers knowledge.')
```
センサデータのcsvファイルをMATLABで読み取り,箱ひげ図と折れ線グラフを表示させたときにグラフの横軸を時間にしたいです。
↑記録したcsvファイルの例です。
時刻(時:分:秒),(コンマ)センサデータ
になっています。
時刻の後の9列のうち1か所だけにセンサデータが入る仕組みです。
列ごとに色を変えたグラフにします。
このコンマより前にある時間を使い横軸をグラフにしたです。
このように最初からエラーが出てしまいます。
最初のreadmatrixが数値専用なのでダメなのかなと思っています。
次に考えられるのがreadcellかreadtableかreadtimetableだと思うのですが使い慣れておらずこのプログラムを完成することが出来ません。
RawData = readmatrix('2023 0110 14_001.csv');
Data= (RawData);
a=Data(:,2);
time = Data(:,1);
t = datetime(time,'inputFormat','HH:mm:ss');
d=t-t(0);
d.Format = 's';
figure(1);
findpeaks(a,'MinPeakHeight',-150)
title('Car:red LGV:pink SUV:green Bus:blue HGV:Cyan Taxi:Black')
xlabel('time','FontSize',35)
ylabel('distance','FontSize',35)
RawData(RawData<50)=NaN;
RawData(RawData>=350)=NaN;
b=RawData(:,3);
M1 = mean(b,'omitnan');
N1=mode(b);
c=RawData(:,4);
M2 = mean(c,'omitnan');
N2=mode(c);
d=RawData(:,5);
M3 = mean(d,'omitnan');
N3=mode(d);
e=RawData(:,6);
M4 = mean(e,'omitnan');
N4=mode(e);
f=RawData(:,7);
M5 = mean(f,'omitnan');
N5=mode(f);
g=RawData(:,8);
M6 = mean(g,'omitnan');
N6=mode(g);
DataM = [M1,M2,M3,M4,M5,M6];
DataN = [N1,N2,N3,N4,N5,N6]
set(gca,'FontSize',24)
hold on
b=Data(:,3);
plot(time,b,'-r*','LineWidth',2)
findpeaks(b,'MinPeakHeight',-150)
c=Data(:,4);
plot(time,c,'-m*','LineWidth',2)
findpeaks(c,'MinPeakHeight',-150)
d=Data(:,5);
plot(time,d,'-g*','LineWidth',2)
findpeaks(d,'MinPeakHeight',-150)
e=Data(:,6);
plot(time,e,'-b*','LineWidth',2)
findpeaks(e,'MinPeakHeight',-150)
f=Data(:,7);
plot(time,f,'-c*','LineWidth',2)
findpeaks(f,'MinPeakHeight',-150)
g=Data(:,8);
plot(time,g,'-k*','LineWidth',2)
findpeaks(g,'MinPeakHeight',-150)
hold off
RawData(:,2) = [];
figure(2);
boxplot(RawData);
ylim([130,300])
xticks([1 2 3 4 5 6])
xticklabels({'Car','LGV','SUV','Bus','HGV','Taxi'})
xlabel('category','FontSize',44)
ylabel('distance','FontSize',40)
set(gca,'FontSize',24)
hold on
plot(DataM,'+');
plot(DataN,'o');
hold off
コードはコードブロックに入れて書きましょうよ。
```python
print('The best way to log and share programmers knowledge.')
```
@pyonteku
Questionernak435さんありがとうございます。
初めての質問で分かりませんでした。
コードブロックに入れさせていただきました。
最初のreadmatrixが数値専用なのでダメなのかなと思っています。
そのCSVの形式ですと、行列データになっていないので、readmatrix
では読めないでしょうね。
readtable
かreadcell
なのかと思います。
pandas
でcsv読み込んだ方が扱い易いかも知れません。
横から失礼します。
言語はMATLABでしたら、次のようにコードブロックの最初の```の後ろにmatlabと記述するとシンタックスハイライトされてコードが読みやすくなります。
```matlab
RawData = readmatrix('2023 0110 14_001.csv');
```
@pyonteku
QuestionerMitz-TADAさんありがとうございます。
そのようにさせていただきます。
@pyonteku
Questionernak435さんありがとうございます。
readtableかreadcellになりますよね。
Pandasは,使ったことがないですがどうしても無理そうなら検討してみます。
URLまで載せていただきありがとうございます。
単純にcsvに見出しがないから?
time,val,a,b,c,d
14:55:14,600,,,,
14:55:14,600,,,,
14:55:14,600,,,,
https://jp.mathworks.com/matlabcentral/fileexchange/?utf8=✓&term=product%3A"MATLAB"
箱ひげ図とグラフを表示
時間が秒までを集約単位としてx軸とすると箱ひげ図では最小、平均、最大(データは600ですが)の3つのみ表示され、データ分析にメリットがないとおもいます。別のグラフを選択するか、分の単位にすることをお奨めします。
MathWorks社の専用ヘルプで問い合わせた方が確実かも?
私はmatplotlibかpandasを持ちてグラフ化してます。
@pyonteku
QuestionerHalHaradaさんありがとうございます。
箱ひげ図では,
時刻,(ここ)センサデータ,,,,のなかの(ここ)にあるコンマが
1個の時はa,2この時はb,のようにa,bごとにセンサーデータの値にだけを使用しています。
x軸は,aとb,y軸では,センサデータの値になるようになっています。
グラフでは,y軸は,センサデータの値,x軸は時間にしたいのです。
質問の前に、MathWorks社のマニュアルを読むように心がけましょう。
2022 | 2023 | 2024 |
---|---|---|
600 | 700 | 800 |
601 | 701 | 801 |
602 | 702 | 802 |
データの構成が上記のようになるのではないでしょうか?
matplotlibのラッピングのように感じます。
@pyonteku
Questioner