matplotlib pyplot不能准确地表示沿x轴的时间

时间:2017-07-10 22:29:21

标签: python pandas matplotlib dataframe

我有一个大约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()

enter image description here

这些代码行产生如下图表:

plt.rcParams['figure.figsize'] = (20,6)
plt.plot(dataframe['dht11'])
plt.show()

enter image description here

第二个图表是数据应该是什么样子,但第一个图表在x轴上有日期。

如何在第二张图表的x轴上显示日期和时间? 感谢

1 个答案:

答案 0 :(得分:2)

首先,请记住将datetime转换为Pandas datetime(pd.to_datetime()) 要使日期显示在第二个图表设置日期时间列作为索引,如:

plt.plot(dataframe.set_index('datetime')['dht11'])

编辑:

所以如果我做对了你就有这样的事情:

enter image description here

日期之间有1周的差距,你想让它们彼此相邻,所以:

x = np.arange(len(a['date']))

plt.plot(x, a['value'])
plt.xticks(x, a['date'], rotation=45)

首先,我在第一张图表中执行类似操作,然后将xlabels的名称更改为与日期相同。结果如下:

enter image description here

但你可能会发现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中指定应出现的刻度数

相关问题