将日期代码添加到matplotlib / python图表

时间:2014-01-14 07:37:57

标签: python matplotlib

我有一个听起来很简单的问题,但它让我疯了几天。我有一个历史时间序列在两个列表中关闭:第一个列表包含价格,让我们说P = [1,1.5,1.3 ...],而第二个列表包含相关日期,假设D = [01/01 / 2010,02 / 01/2010 ...]。我想做的是绘制这些日期中的一些(当我说“某些”是因为我到目前为止所获得的“最佳”结果是将所有这些显示为代码,因此在其中创建了一个黑色的不可读数据云。 x轴)当放大时,会更详细地显示。这张照片现在具有由Matplotlib制作的渐进式自动化范围:

Zoom-out

而不是0,200,400等。我想要绘制与数据点相关的日期值。此外,当我放大时,我得到以下内容:

Zoom-in

除了我得到0到200(20,40等)之间的细节之外,我想将日期附在列表中。 我确定这是一个简单的问题要解决,但我是Matplotlib以及Python的新手,任何提示都会受到赞赏。提前致谢

3 个答案:

答案 0 :(得分:9)

Matplotlib对绘制日期提供了复杂的支持。我建议使用AutoDateFormatter和AutoDateLocator。它们甚至是特定于语言环境的,因此它们根据您的语言环境选择月份名称。

import matplotlib.pyplot as plt
from matplotlib.dates import AutoDateFormatter, AutoDateLocator

xtick_locator = AutoDateLocator()
xtick_formatter = AutoDateFormatter(xtick_locator)

ax = plt.axes()
ax.xaxis.set_major_locator(xtick_locator)
ax.xaxis.set_major_formatter(xtick_formatter)

修改

要与多个子图一起使用,请使用多个定位器/格式化器对:

import datetime
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import AutoDateFormatter, AutoDateLocator, date2num

x = [datetime.datetime.now() + datetime.timedelta(days=30*i) for i in range(20)]
y = np.random.random((20))

xtick_locator = AutoDateLocator()
xtick_formatter = AutoDateFormatter(xtick_locator)

for i in range(4):
    ax = plt.subplot(2,2,i+1)
    ax.xaxis.set_major_locator(xtick_locator)
    ax.xaxis.set_major_formatter(xtick_formatter)
    ax.plot(date2num(x),y)


plt.show()

答案 1 :(得分:1)

你可以用熊猫做时间序列图 有关详细信息,请参阅:http://pandas.pydata.org/pandas-docs/dev/timeseries.htmlhttp://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.plot.html

import pandas as pd    
DateStrList = ['01/01/2010','02/01/2010']
P = [2,3]
D = pd.Series([pd.to_datetime(date) for date in DateStrList])
series =pd.Series(P, index=D)
pd.Series.plot(series)

答案 2 :(得分:0)

import matplotlib.pyplot as plt
import pandas
pandas.TimeSeries(P, index=D).plot()
plt.show()