gpt4 book ai didi

python - 使用 matplotlib 绘制带有纪元时间 x 轴的图表

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:51 26 4
gpt4 key购买 nike

我有以下代码用 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()

Plot

关于python - 使用 matplotlib 绘制带有纪元时间 x 轴的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com