向matplotlib/python图表添加日期标记

向matplotlib/python图表添加日期标记,python,matplotlib,Python,Matplotlib,我有一个问题,听起来很简单,但这几天我都快发疯了。我有一个历史时间序列,分为两个列表:第一个列表包含价格,比如P=[1,1.5,1.3…],而第二个列表包含相关日期,比如D=[01/01/2010,02/01/2010…]。我想做的是绘制其中一些日期(当我说“一些”时,是因为到目前为止我得到的“最佳”结果是将所有日期显示为标记,从而在x轴上创建一个无法读取的数据黑云),当放大时,这些日期会显示得更详细。此图片现在具有Matplotlib制作的渐进式自动范围: 我希望绘制与数据点相关的日期值,而

我有一个问题,听起来很简单,但这几天我都快发疯了。我有一个历史时间序列,分为两个列表:第一个列表包含价格,比如P=[1,1.5,1.3…],而第二个列表包含相关日期,比如D=[01/01/2010,02/01/2010…]。我想做的是绘制其中一些日期(当我说“一些”时,是因为到目前为止我得到的“最佳”结果是将所有日期显示为标记,从而在x轴上创建一个无法读取的数据黑云),当放大时,这些日期会显示得更详细。此图片现在具有Matplotlib制作的渐进式自动范围:

我希望绘制与数据点相关的日期值,而不是0、200、400等。此外,当我放大时,我得到以下信息:

以及我得到的细节之间的0和200(20,40等),我想得到的日期附在名单上。
我相信这是一个很容易解决的问题,但我对Matplotlib和Python都是新手,如果有任何提示,我将不胜感激。提前感谢

Matplotlib对打印日期提供了完善的支持。我建议使用AutoDateFormatter和AutoDateLocator。它们甚至是特定于区域设置的,因此它们根据您的区域设置选择月份名称

import matplotlib.pyplot as plt
import pandas
pandas.TimeSeries(P, index=D).plot()
plt.show()
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()

您可以使用熊猫进行时间序列绘图 有关详细信息,请参阅:和


你能插入一些额外的信息吗,这样你的代码就更容易理解了?非常感谢,我正在尝试不安装额外的库,因为代码将在多台机器上使用,并且预计不会出现库分发,但是如果我不能成功使用Thorsten方法,而Thorsten方法没有假设任何额外的引用,我会尝试使用它。这个子图可能有任何问题吗?我有这样的东西:plt.figure(1)plt.subplot(211)plt.plt(P1)plt.subplot(212)plt.plt.plt(P2),你给我的方法还不起作用……所有创建子图的方法,比如
plt.axes
plt.subplot
等等,都返回axes对象。您必须为每个定位器/格式化程序对创建一个单独的定位器/格式化程序对,并将它们分配给axes-object。谢谢,我正在尝试通过它来实现。然而,我仍然有一个问题,那就是不能真正阅读日期。无法将图片粘贴到此处的注释中,但如果您尝试运行代码,我想您将得到相同的结果。。。你知道如何修复它吗?你可以使用
minticks
maxticks
参数来
AutoDateLocator
来控制滴答声的数量。非常感谢,我正在尝试不安装额外的库,因为代码将在多台机器上使用,并且预计不会出现库分发,但是如果我不能成功使用Thorsten方法,我会尝试它,因为Thorsten方法没有假设任何额外的引用。
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)