前提
Pythonでmdatesを用いたグラフを作っています。
グラフの枠組みができても,数値をグラフに反映させることができません.
実現したいこと
x軸が時間,y軸が数値のグラフを作りたい.
y軸の数値はcsvファイルから引用したい.
↑このcsvファイルは1列目が20230119_1800のような時間を表すものになっており,2列目が数値になっている.
エラーなどはないが,折れ線グラフが表示されない.
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import matplotlib.dates as mdates 3import pandas as pd 4import tabulate 5import numpy as np 6 7# テストデータ line6~15 8tm=pd.date_range("20191209 0:00" ,"20191210 0:00" , freq="60min") 9 10dt= pd.read_csv("readimage2.csv",encoding="SHIFT_JIS",usecols=[0,1]) 11 12df=pd.DataFrame(dt) 13 14print(df.to_markdown()) 15 16 17#ここから下はグラフ作成 18 19fig = plt.figure(facecolor="white") 20ax = fig.add_subplot( 21 211, 22 title="20221211 - 20221212", 23 xlabel="Time", 24 ylabel='Coordinate', 25 ) 26 27ax.plot(df["value"] , data=tm ) 28ax.grid(True) 29 30 31#ここから下はグラフの詳細 32 33#x軸の描画の範囲を指定。これを入れないと、時刻がうまくそろわない 34ax.set_xlim(tm[0] , tm[24]) 35 36 37#2時間おきにラベル 38Minute1=mdates.MinuteLocator(range(120),120) 39ax.xaxis.set_major_locator(Minute1) 40 41#30分おきに軸線 42Minute2=mdates.MinuteLocator(range(60),30) 43ax.xaxis.set_minor_locator(Minute2) 44 45#H:M のフォーマットでラベルを書く 46Minute_fmt = mdates.DateFormatter('%H:%M') 47ax.xaxis.set_major_formatter(Minute_fmt) 48 49 50#縦書きの指定 51plt.setp(ax.get_xticklabels(), rotation=45, ha="right") 52 53plt.show() #画像表示
試したこと
ax.plotの中身をいじってみたのですが線がそもそも現れない.
補足情報(FW/ツールのバージョンなど)
python3を使用.
ax.plot () の x と y が逆なのではないでしょうか。
ax.plot(df["value"] , data=tm )
=>
ax.plot(tm, df["value"])
melianさん,回答ありがとうございます.ご指摘の通りプログラムを変更してみたのですが,以下のように表示されました.
Positional argument cannot appear after keyword argumentsPylance.
よってxとyは逆にできないのかなと思います.
data=tm
=>
tm
に変更したところ,実行はできたのですが以下のようなエラーが起きました.
raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (25,) and (406,)
> このcsvファイルは1列目が20230119_1800のような時間を表すものになっており、
pandas.date_range で tm を作成するのではなく、CSV ファイルの1列目の値から tm を作成するとよいかと思います。もしくは、
tm = pd.date_range(start="20191209 0:00", periods=406, freq="60min")
とすれば、とりあえず df["Value"] の長さと合わせることができます。ただ、freq="60min" なので、最後の日時は 2019-12-25 21:00:00 になりますが。
1日の中での,y軸の変化を見るグラフを作りたいです.
なので.開始時間:2019-12-11 00:00であれば,終了時間: 2019-12-12 00:00にしたいです.
y軸の数値は1分毎に記録したものになります.
その場合、1分毎に1日分のデータなので、y値の個数は1440 個ということになるはずなのですが、、、実際には406個しかありませんね。。。
>>melianさん
406個のデータを撮った時間の部分にだけ折れ線を表示させるというのは厳しいでしょうか?
1日分の枠の中で,該当する時間にだけ折れ線を表示させるという意味です.
はい、そうでしたら可能です。時間が取れたら回答に書きます。
>>melianさん
ありがとうございます.回答お待ちしております.
回答1件
あなたの回答
tips
プレビュー
