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

标签 python matplotlib

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

相关文章:

python - 如何创建具有默认参数和任意参数的函数

python - sqlalchemy 表达式 not_

python - NDB 异步 API 和 get_or_insert_async

python - 在字符串列表中搜索部分字符串

python - 如何在 MatPlotLib 中注释/突出显示 3d 图

python-3.x - 如何使用存储在 csv 中的情绪分析数据的 Pandas 绘制多折线图

python - 如何在下一个 jupyter 单元格中重复使用 plot

python - 使用numpy在for循环中进行多核处理

python - 如何在我的 GUI 上绘图

用于步骤图的数据框中的 Python 重新排序级别