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

如何使用matplotlib在x轴上针对特定日期绘制数据

戎志勇
2023-03-14
问题内容

我有一个由日期-值对组成的数据集。我想将它们绘制在x轴上具有特定日期的条形图中。

我的问题是在整个日期范围内matplotlib分配xticks;并使用点绘制数据

日期是所有datetime对象。这是数据集的示例:

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
        (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
        (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
        (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]

这是使用的可运行代码示例 pyplot

import datetime as DT
from matplotlib import pyplot as plt

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
        (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
        (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
        (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]

x = [date for (date, value) in data]
y = [value for (date, value) in data]

fig = plt.figure()

graph = fig.add_subplot(111)
graph.plot_date(x,y)

plt.show()

问题摘要:
我的情况更像是我已经Axes准备好一个实例(graph在上面的代码中由引用),并且我想执行以下操作:

  1. 使xticks对应于确切的日期值。我听说过,matplotlib.dates.DateLocator但我不知道如何创建一个对象,然后将其与特定Axes对象关联。
  2. 严格控制使用的图形类型(条形,线形,点形等)

问题答案:

您正在做的事情很简单,以至于只使用plot而不是plot_date最容易。plot_date对于更复杂的情况非常有用,但是没有它就可以轻松完成所需的设置。

例如,根据上面的示例:

import datetime as DT
from matplotlib import pyplot as plt
from matplotlib.dates import date2num

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
        (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
        (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
        (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]

x = [date2num(date) for (date, value) in data]
y = [value for (date, value) in data]

fig = plt.figure()

graph = fig.add_subplot(111)

# Plot the data as a red line with round markers
graph.plot(x,y,'r-o')

# Set the xtick locations to correspond to just the dates you entered.
graph.set_xticks(x)

# Set the xtick labels to correspond to just the dates you entered.
graph.set_xticklabels(
        [date.strftime("%Y-%m-%d") for (date, value) in data]
        )

plt.show()

如果您希望使用条形图,请使用plt.bar()。要了解如何设置线条和标记样式,请参见在标记位置使用日期标签进行绘图http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.pngplt.plot()



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

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

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

  • 问题内容: 我正在尝试在x轴上绘制日期图,在y轴上绘制值。它工作正常,但无法获得适当的X轴范围。尽管我的日期是今天,但x轴范围始终是2012年1月至2016年1月。我什至指定xlim应该是第一个和最后一个日期。 我正在为python-django写这个,如果相关的话。 问题答案: 从OP看到实际数据后,所有值都在同一日期/时间。因此matplotlib自动将x轴缩小。你仍然可以手动设置对象的x轴限

  • 问题内容: 我有一张根据某些数据计算得出的图表,绘制在matplotlib中。我想在此图的全局最大值周围绘制一个矩形区域。我试过,但通话时似乎没有出现矩形 那么,如何在matplotlib图上绘制矩形区域?谢谢! 问题答案: 最可能的原因是在调用axhspan时将数据单元用作x参数。从函数的文档(我的重点): y坐标以数据单位为单位, x坐标以轴(相对于0-1)为单位 。 因此,任何向左拉伸为0或

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