使用Matplotlib使用时间x轴绘制图表

马西奥

我有以下代码使用matplotlib绘制图表

#!/usr/bin/env python
import matplotlib.pyplot as plt
import urllib2
import json

req = urllib2.urlopen("http://localhost:17668/retrieval/data/getData.json?        pv=LNLS:ANEL:corrente&donotchunk")
data = json.load(req)
secs = [x['secs'] for x in data[0]['data']]
vals = [x['val'] for x in data[0]['data']]

plt.plot(secs, vals)
plt.show()

secs数组是纪元时间。

我想要的是在x轴(秒)上绘制数据作为日期(DD-MM-YYYY HH:MM:SS)。

我怎样才能做到这一点?

物理学家

要在matplotlib中绘制基于日期的数据,您必须将数据转换为正确的格式。

一种方法是首先将数据转换为datetime对象,您应该使用epoch时间戳datetime.datetime.fromtimestamp()

然后,您必须将datetime对象转换为matplotlib的正确格式,可以使用来处理matplotlib.date.date2num

或者,您可以首先使用matplotlib.dates.epoch2num和跳过将日期转换为datetime对象的方式(虽然最初更适合您的用例,但我建议尝试datetime在工作时尽可能多地将基于日期的日期保留在对象中,这样可以节省您的时间)从长远来看很头疼)。

正确设置数据格式后,您可以使用绘制数据plot_date

最后,根据需要设置X轴的格式,您可以使用一个matplotlib.dates.DateFormatter对象选择刻度线的外观。

import matplotlib.pyplot as plt
import matplotlib.dates as mdate

import numpy as np

# Generate some random data.
N = 40
now = 1398432160
raw = np.array([now + i*1000 for i in range(N)])
vals = np.sin(np.linspace(0,10,N))

# Convert to the correct format for matplotlib.
# mdate.epoch2num converts epoch timestamps to the right format for matplotlib
secs = mdate.epoch2num(raw)


fig, ax = plt.subplots()

# Plot the date using plot_date rather than plot
ax.plot_date(secs, vals)

# Choose your xtick format string
date_fmt = '%d-%m-%y %H:%M:%S'

# Use a DateFormatter to set the data to the correct format.
date_formatter = mdate.DateFormatter(date_fmt)
ax.xaxis.set_major_formatter(date_formatter)

# Sets the tick labels diagonal so they fit easier.
fig.autofmt_xdate()

plt.show()

阴谋

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章