我有一个由日期 - 值对组成的数据集。我想在条形图中绘制它们,并在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
引用)并且我想要执行以下操作:
xticks
对应于确切的日期值。我听说过matplotlib.dates.DateLocator
,但我不知道如何创建一个,然后将其与特定的Axes
对象相关联。 答案 0 :(得分:30)
你正在做的事情很简单,只使用情节而不是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()
即可。要了解如何设置线条和标记样式,请参阅plt.plot()
Plot with date labels at marker locations http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.png