首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用matplotlib在x轴上绘制特定日期的数据

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

Stack Overflow用户
提问于 2010-08-15 11:48:52
回答 1查看 33.4K关注 0票数 17

我有一个由日期-值对组成的数据集。我想把它们画成条形图,在x轴上标出具体日期。

我的问题是,matplotlibxticks分布在整个日期范围内;并且还使用点来绘制数据。

日期都是datetime对象。以下是数据集的示例:

代码语言:javascript
复制
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的可运行代码示例

代码语言:javascript
复制
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. 更严格地控制正在使用的图形类型(条形图、线图、点图等)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-15 23:31:38

您所做的事情非常简单,最简单的方法是使用plot,而不是plot_date。plot_date适用于更复杂的情况,但是设置您需要的东西不需要它也很容易完成。

例如,基于你上面的例子:

代码语言:javascript
复制
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()。要了解如何设置线和标记样式,请参阅plt.plot() Plot with date labels at marker locations http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.png

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3486121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档