我有一个由日期-值对组成的数据集。我想把它们画成条形图,在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
对象相关联。发布于 2010-08-15 23:31:38
您所做的事情非常简单,最简单的方法是使用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()
。要了解如何设置线和标记样式,请参阅plt.plot()
Plot with date labels at marker locations http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.png
https://stackoverflow.com/questions/3486121
复制相似问题