当前位置: 首页 > 面试题库 >

在matplotlib中绘制一天中的时间与日期的关系

汪弘盛
2023-03-14
问题内容

我想以特定的几种方式在x轴上绘制日期,在y轴上绘制一天中的时间,然后绘制线条图或间隔(浮动条)图。

这样的答案有帮助

但是我与那个情节有一些区别,我无法使其正常工作。我实际上是在y轴上绘制日期和时间的图,所以当我只需要一天的时间时,它在y轴上压缩了几个月的时间戳。该示例在注释中声称:“
yaxis的基准日期可以是任何东西,因为信息在时间上”,但是我不明白他是如何“扔掉”基准日期信息的。

无论如何,我的需求是:

  1. 我想选择y轴的24小时制(00:00到24:00)或am / pm样式时间,该轴的刻度看起来像3:00 pm、11:00am等。我想是用FuncFormatter完成的。

  2. 对于间隔(时间范围),我不想使用误差线-线太细了。我想使用一个(浮动的)条形/柱形图。

我的数据是格式为‘2010-12-20 05:00:00’的日期时间字符串

谢谢你的帮助。


问题答案:

我认为您对matplotlib究竟如何在后台处理时间和日期感到有些困惑。

matplotlib中的所有日期时间都表示为简单浮点数。1天对应于1.0的差,日期是自1900年以来的天数(如果我没有记错的话,无论如何)。

因此,为了只绘制给定日期的时间,您需要使用% 1

我将使用点,但是您可以轻松使用条形图。考虑使用bottom,如果你使用关键字参数plt.bar,使杆的底部将在您的时间间隔的开始时间开始(请记住第二个参数是
高度 了吧,不是其顶部的y值)。

例如:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import datetime as dt

# Make a series of events 1 day apart
x = mpl.dates.drange(dt.datetime(2009,10,1), 
                     dt.datetime(2010,1,15), 
                     dt.timedelta(days=1))
# Vary the datetimes so that they occur at random times
# Remember, 1.0 is equivalent to 1 day in this case...
x += np.random.random(x.size)

# We can extract the time by using a modulo 1, and adding an arbitrary base date
times = x % 1 + int(x[0]) # (The int is so the y-axis starts at midnight...)

# I'm just plotting points here, but you could just as easily use a bar.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot_date(x, times, 'ro')
ax.yaxis_date()
fig.autofmt_xdate()

plt.show()

时间与日期

希望能有所帮助!



 类似资料:
  • 问题内容: 我有一个固定宽度的数据文件,其中包含日期,但是当我尝试绘制数据时,日期无法在x轴上正确显示。 我的档案看起来像 等等 我用 熊猫 读文件 所以我想这里的问题是从熊猫到matplotlib日期时间的转换,如何进行转换? 我也直接尝试了熊猫: 但这失败了 TypeError:空的“ Series”:没有要绘制的数字数据 问题答案: 如果您使用包含列名而不是字符串的列表,则data.set_

  • 问题内容: 我有一个格式为(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个浮点数对应于timestamp数组中的一个值。 我可以使用Matplotlib在x轴上绘制时间,在y轴上绘制数字吗? 我试图这样做,但是不知何故它只接受浮点数数组。如何获得时间图?我必须以任何方式修改格式吗? 问题答案: 你必须首先将时间戳转换为对象(使用)。然后使用将日期转换为格式。 使用以下方式绘制

  • 问题内容: 我尝试使用以下代码在具有日期时间x轴的图形上绘制矩形: 但是,我得到了错误: 怎么了 (我正在使用matplotlib 1.0.1版) 问题答案: 问题在于,matplotlib使用其自己的日期/时间表示形式(浮动天数),因此您必须先进行转换。此外,您将不得不告诉xaxis它应该具有日期/时间刻度和标签。下面的代码可以做到这一点: 结果: 注意 :Matplotlib 1.0.1 非常

  • 我试图在一个5年的时间序列图上绘制日期(N=50),我很难弄清楚如何在for循环上运行迭代。下面是我试图绘制日期的一个例子。 我正在绘制日期的视觉效果 目前,我正在尝试: 我收到一个错误: 我不确定这是否与dtype是datetime有关,或者我是否需要尝试另一种方法,但是任何建议/指导都非常感谢! 谢谢你! 这就是我试图完成的:示例图像 编辑:生成打印的代码 ` 这将复制我使用的精确数据的样本。

  • 问题内容: 我正在尝试根据日期绘制信息。我有日期列表,格式为“ 01/02/1991”。 我通过执行以下操作来转换它们: 这使 然后我尝试使用num2date 绘图: 但是我得到一个错误。它显示“ ValueError:年份超出范围”。有什么办法吗? 问题答案: 就像@KyssTao所说的那样,必须是一个浮点数,其中要给出从0001-01-01开始的天数加一。因此,它不是1991年1月2日,因为如

  • 我试着在一周中的某几天的同一时间安排每天的石英工作,例如每周二的上午9点或周二和周三的上午10点。 我发现的防止这种行为的唯一方法是将触发器的开始时间覆盖到第二天,但如果当前时间在触发器时间之前,则会错过当前一天的触发器,这使得我将Quartz用作每日调度器毫无意义。 注意:我是通过石英岩使用石英,石英岩是在石英上的一层薄薄的Clojure层,但这种意想不到的行为似乎与石英岩无关。 下面是我的触发