我有一个大约3000条记录的JSON数组,每条记录间隔1分钟,我想用matplotlib
在时间序列图上绘制。但是,我无法在具有沿x轴的日期和时间的图表上正确显示数据。
记录格式如下:
{
"datetime": "10-07-2017 21:57:37",
"deviceid": "PiJCLabDoor",
"dht11": 24.0,
"dht22": null,
"id": 39751,
"motion": 0.0,
"pressure": null,
"uv": 0.04,
"voc": 126.0
}
我有以下代码
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt
data = pd.read_json('PiJCLabDoor.json', convert_dates=['datetime'])
dataframe = DataFrame(data)
for i in range(0, dataframe.shape[0] -1):
if (dataframe.loc[i, 'dht11'] - dataframe.loc[i+1, 'dht11']) > 3 :
dataframe.loc[i+1, 'dht11'] = dataframe.loc[i,'dht11']
这些代码行产生如下图表:
plt.figure(figsize=(20,7)
plt.plot(dataframe['datetime'], dataframe['dht11'])
plt.show()
这些代码行产生如下图表:
plt.rcParams['figure.figsize'] = (20,6)
plt.plot(dataframe['dht11'])
plt.show()
第二个图表是数据应该是什么样子,但第一个图表在x轴上有日期。
如何在第二张图表的x轴上显示日期和时间? 感谢
答案 0 :(得分:2)
首先,请记住将datetime转换为Pandas datetime(pd.to_datetime()) 要使日期显示在第二个图表设置日期时间列作为索引,如:
plt.plot(dataframe.set_index('datetime')['dht11'])
编辑:
所以如果我做对了你就有这样的事情:
日期之间有1周的差距,你想让它们彼此相邻,所以:
x = np.arange(len(a['date']))
plt.plot(x, a['value'])
plt.xticks(x, a['date'], rotation=45)
首先,我在第一张图表中执行类似操作,然后将xlabels的名称更改为与日期相同。结果如下:
但你可能会发现xticks太频繁出现,然后只改变一行,就像这样:
plt.xticks(x[::3], a['date'][::3], rotation=45)
所以现在只有每三个日期出现在图表上。
编辑2:
如果您只想在x轴上设置X主日期,请使用:
from matplotlib.ticker import LinearLocator
plt.plot(x, a['value'])
plt.xticks(x, a['date'], rotation=45)
ax = plt.gca()
ax.get_xaxis().set_major_locator(LinearLocator(numticks=5))
在numticks中指定应出现的刻度数