3点ほど。
1. pandas
にてCSVデータを読み込む際に、0行目のデータを時系列データとして読み込んでください。
やり方としては、read_csv()
の引数に parse_dates=[0]
を記述するだけで時系列データとして読み込めると思います。
Python
1A=pd.read_csv("/var/www/tempX/"+ymd+"b.csv", header=None, sep=' ', parse_dates=[0])
2print(A.head())
3# => 0 1
4# 0 2017-10-12 07:00:00 56.7
5# 1 2017-10-12 07:01:00 56.5
6# 2 2017-10-12 07:02:00 56.5
7# 3 2017-10-12 07:03:00 56.5
8# 4 2017-10-12 07:04:00 56.5
9
10print(A[0].dtype)
11# => datetime64[ns]
質問文のデータ形式に合わせて、上のコードでは セパレータをスペース(sep=' '
)、ヘッダー部を無し(header=None
) を指定しております。
2. plot()
の引数にはXデータとYデータの両方を渡してください。
Yデータのみを渡すと、X軸は自動的に 0からのカウントデータになってしまいますので、X軸には上記で設定した1列目の時系列データを渡してください
あと細かいですが、
A.T.values[1]
は A[1]
でOK
marker = 'o'
は データを渡すときに一緒に記述する
です。
Python
1# コレを
2# plt.plot(A.T.values[1])
3# ↓に修正
4plt.plot(A[0], A[1], marker='o')
3.
時系列データをプロットすると軸の区切り間隔がおかしくなりますので、X軸に時系列用のlocator
を設定してください。
また、時刻ラベルのフォーマットを時系列用の formatter
にて併せて設定しておくと良いかと思います。
https://matplotlib.org/api/dates_api.html
例えば、今回の場合は区切り間隔を1時間毎にすると適当かと思いますので、
locator
として mdates.HourLocator()
を設定します。
またこの際に、formatter
を DateFormatter('%H:%M')
しておくとよいでしょう。
以上をまとめるとこんな感じになるかと思います。
Python
1import matplotlib.pyplot as plt
2import matplotlib.dates as mdates
3import pandas as pd
4import datetime
5
6d = datetime.datetime.today()
7ymd = d.strftime("%Y%m%d")
8
9A=pd.read_csv("/var/www/tempX/"+ymd+"b.csv", header=None, sep=' ', parse_dates=[0])
10
11fig = plt.figure(figsize=(8,5))
12ax = fig.add_subplot(111)
13ax.set_title("A Line Temperature")
14ax.set_xlabel("time")
15ax.set_ylabel("temp")
16ax.set_ylim([30,70])
17# 1時間毎に目盛り追加(Major)
18ax.xaxis.set_major_locator(mdates.HourLocator())
19ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
20# 10分ごとの目盛り追加(Mitor)
21ax.xaxis.set_minor_locator(mdates.MinuteLocator([10,20,30,40,50]))
22ax.plot(A[0],A[1], marker='o')
23
24plt.show()
25plt.savefig(ymd+"B.png")
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/12 14:32