LoginSignup
pyonteku
@pyonteku

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MATLABのグラフを横軸を時間軸にしたい

解決したいこと

センサデータのcsvファイルをMATLABで読み取り,箱ひげ図と折れ線グラフを表示させたときにグラフの横軸を時間にしたいです。

2024 0110 14_010 - メモ帳 2024_01_11 13_50_51.png
↑記録したcsvファイルの例です。
時刻(時:分:秒),(コンマ)センサデータ
になっています。
時刻の後の9列のうち1か所だけにセンサデータが入る仕組みです。
列ごとに色を変えたグラフにします。
このコンマより前にある時間を使い横軸をグラフにしたです。

発生している問題・エラー

image.png

このように最初からエラーが出てしまいます。
最初の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
0

2Answer

コードはコードブロックに入れて書きましょうよ。

書き方
```python
print('The best way to log and share programmers knowledge.')
```

0Like

Comments

  1. @pyonteku

    Questioner

    nak435さんありがとうございます。
    初めての質問で分かりませんでした。
    コードブロックに入れさせていただきました。

  2. 最初のreadmatrixが数値専用なのでダメなのかなと思っています。

    そのCSVの形式ですと、行列データになっていないので、readmatrixでは読めないでしょうね。
    readtablereadcellなのかと思います。


    pandasでcsv読み込んだ方が扱い易いかも知れません。

  3. 横から失礼します。
    言語はMATLABでしたら、次のようにコードブロックの最初の```の後ろにmatlabと記述するとシンタックスハイライトされてコードが読みやすくなります。

    書き方
    ```matlab
    RawData = readmatrix('2023 0110 14_001.csv');
    
    ```
    
  4. @pyonteku

    Questioner

    Mitz-TADAさんありがとうございます。
    そのようにさせていただきます。

  5. @pyonteku

    Questioner

    nak435さんありがとうございます。
    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を持ちてグラフ化してます。

0Like

Comments

  1. @pyonteku

    Questioner

    HalHaradaさんありがとうございます。
    箱ひげ図では,
    時刻,(ここ)センサデータ,,,,のなかの(ここ)にあるコンマが
    1個の時はa,2この時はb,のようにa,bごとにセンサーデータの値にだけを使用しています。
    x軸は,aとb,y軸では,センサデータの値になるようになっています。
    グラフでは,y軸は,センサデータの値,x軸は時間にしたいのです。

  2. 質問の前に、MathWorks社のマニュアルを読むように心がけましょう。

    2022 2023 2024
    600 700 800
    601 701 801
    602 702 802

    データの構成が上記のようになるのではないでしょうか?

    matplotlibのラッピングのように感じます。

  3. @pyonteku

    Questioner

    HalHaradaさんありがとうございます。
    箱ひげ図では,サイトにもあるようにaとbをくらべたいのでそれでいいのです。
    a.png

    今回の質問に関して箱ひげ図に関しては,質問してないです。
    宜しくお願い致します。

Your answer might help someone💌