【问题标题】:Python Plotting TimePython 绘图时间
【发布时间】:2017-04-20 08:57:13
【问题描述】:
time_arr =[1491343400.0, 1491343830.0, 1491344137.0, 1491344322.0, 1491344751.0, 1491412847.0, 1491413092.0, 1491413277.0, 1491413645.0, 1491413952.0, 1491414198.0, 1491414627.0, 1491418003.0, 1491418924.0, 1491419170.0, 1491419907.0, 1491420091.0, 1491421073.0, 1491422915.0, 1491423591.0, 1491423960.0, 1491424389.0, 1491426048.0, 1491426846.0, 1491427890.0, 1491428566.0, 1491428935.0]

嗨,

我正在尝试将这个时间数组与一个相同长度的卷进行对比。我想要这种格式的时间 2015-02-18 02:08:12。我的问题:

  1. 将这些秒转换成这种格式:2015-02-18 02:08:12

  2. 使用 matplotlib 在 x 轴上绘制 TIME 和 DATES

我从网上得到了这段代码,但它只给出了 h、m 和 s:

def format_seconds_to_hhmmss(seconds):
    hours = seconds // (60*60)
    seconds %= (60*60)
    minutes = seconds // 60
    seconds %= 60
    return "%02i:%02i:%02i" % (hours, minutes, seconds)   

如何改变它来做我想做的事?

我想使用条形图。

【问题讨论】:

标签: datetime matplotlib


【解决方案1】:

您必须将时间戳转换为日期时间,然后使用 matplotlib 以所需的方式进行绘制:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime

time_arr =[1491343400.0, 1491343830.0, 1491344137.0, 1491344322.0, 1491344751.0, 1491412847.0, 1491413092.0, 1491413277.0, 1491413645.0, 1491413952.0, 1491414198.0, 1491414627.0, 1491418003.0, 1491418924.0, 1491419170.0, 1491419907.0, 1491420091.0, 1491421073.0, 1491422915.0, 1491423591.0, 1491423960.0, 1491424389.0, 1491426048.0, 1491426846.0, 1491427890.0, 1491428566.0, 1491428935.0]

# convert timestamp to datetime
x = [datetime.datetime.fromtimestamp(val) for val in time_arr]
print(x)
# random y values
y = np.random.rand(len(time_arr))

ax = plt.subplot(111)
ax.bar(x, y, width = 0.01)
# set datetime formatter for x axis
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
# set ticks every 30 mins 
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=30))
# set fontsize of ticks
ax.tick_params(axis='x', which='major', labelsize=5)
# rotate ticks for x axis
plt.xticks(rotation=90)
plt.show()

您有大量数据,每 6 小时设置一次刻度。

但是,如果打印 x 数组,您会得到日期和时间,直到秒:

[datetime.datetime(2017, 4, 5, 8, 3, 20), datetime.datetime(2017, 4, 5, 8, 10, 30), datetime.datetime(2017, 4, 5, 8, 15, 37), datetime.datetime(2017, 4, 5, 8, 18, 42), datetime.datetime(2017, 4, 5, 8, 25, 51), datetime.datetime(2017, 4, 6, 3, 20, 47), datetime.datetime(2017, 4, 6, 3, 24, 52), datetime.datetime(2017, 4, 6, 3, 27, 57), datetime.datetime(2017, 4, 6, 3, 34, 5), datetime.datetime(2017, 4, 6, 3, 39, 12), datetime.datetime(2017, 4, 6, 3, 43, 18), datetime.datetime(2017, 4, 6, 3, 50, 27), datetime.datetime(2017, 4, 6, 4, 46, 43), datetime.datetime(2017, 4, 6, 5, 2, 4), datetime.datetime(2017, 4, 6, 5, 6, 10), datetime.datetime(2017, 4, 6, 5, 18, 27), datetime.datetime(2017, 4, 6, 5, 21, 31), datetime.datetime(2017, 4, 6, 5, 37, 53), datetime.datetime(2017, 4, 6, 6, 8, 35), datetime.datetime(2017, 4, 6, 6, 19, 51), datetime.datetime(2017, 4, 6, 6, 26), datetime.datetime(2017, 4, 6, 6, 33, 9), datetime.datetime(2017, 4, 6, 7, 0, 48), datetime.datetime(2017, 4, 6, 7, 14, 6), datetime.datetime(2017, 4, 6, 7, 31, 30), datetime.datetime(2017, 4, 6, 7, 42, 46), datetime.datetime(2017, 4, 6, 7, 48, 55)]

【讨论】:

  • @che 对那些不等间距的数据使用条形图可能没有太大意义,但无论如何,可能需要更小的条形宽度,例如ax.bar(x, y, ec="k", width=0.005,alpha=0.5)
  • 嗨,我怎样才能仅每半小时绘制一次 x 轴值?
  • 如上使用 MinuteLocator(interval=30)。
  • 谢谢,我现在还有一个问题可以请你帮忙。
  • C:\Users\Cheroline\Anaconda3\lib\site-packages\matplotlib\axis.py:1045:用户警告:无法找到沿轴的像素距离以进行刻度间隔填充;假设不需要间隔填充。 warnings.warn("无法找到沿轴的像素距离"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2011-03-03
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多