我有一个由日期-值对组成的数据集。我想将它们绘制在x轴上具有特定日期的条形图中。
我的问题是在整个日期范围内matplotlib分配xticks;并使用点绘制数据。
matplotlib
xticks
日期是所有datetime对象。这是数据集的示例:
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
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在上面的代码中由引用),并且我想执行以下操作:
Axes
graph
matplotlib.dates.DateLocator
您正在做的事情很简单,以至于只使用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()
plt.bar()
plt.plot()