我有以下代码用 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
对象,对于纪元时间戳,你应该使用 datetime.datetime.fromtimestamp()
.
然后您必须将 datetime
对象转换为 matplotlib 的正确格式,这可以使用 matplotlib.date.date2num
处理.
或者您可以使用 matplotlib.dates.epoch2num
并首先跳过将日期转换为 datetime
对象(虽然这最初更适合您的用例,但我建议尝试在 datetime
对象中保留基于日期的日期尽可能多地工作,从长远来看,它会让你省去头痛。
一旦您的数据格式正确,您就可以使用 plot_date
绘制它。 .
最后,如您所愿,您可以使用 matplotlib.dates.DateFormatter
格式化您的 x 轴。对象来选择您的刻度线的外观。
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()
关于python - 使用 matplotlib 绘制带有纪元时间 x 轴的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294197/