Python 使用timedelta索引从数据帧打印

Python 使用timedelta索引从数据帧打印,python,pandas,matplotlib,Python,Pandas,Matplotlib,我正试图从带有时间增量索引的pandas数据框中绘制一些数据,并希望自定义x轴中的时间刻度和标签。这应该很简单,但事实证明这是一项艰巨的工作 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as dates ## I have a df similar to this timestamps = pd.date_range(start="2017-05-0

我正试图从带有时间增量索引的pandas数据框中绘制一些数据,并希望自定义x轴中的时间刻度和标签。这应该很简单,但事实证明这是一项艰巨的工作

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates

## I have a df similar to this
timestamps = pd.date_range(start="2017-05-08", freq="10T", periods=6*6)
timedeltas = timestamps - pd.to_datetime("2017-05-08")
yy = np.random.random((len(timedeltas),10))
df = pd.DataFrame(data=yy, index=timedeltas)  # Ok, this is what I have

## Now I want to plot this but I want detailed control of the plot so I use matplotlib instead of df.plot
fig,axes=plt.subplots()
axes.plot(df.index.values, df.values)
#axes.plot_date(df.index, df.values, '-')

axes.xaxis.set_major_locator(dates.HourLocator(byhour=range(0,24,2)))
axes.xaxis.set_minor_locator(dates.MinuteLocator(byminute=range(0,24*60,10)))
axes.xaxis.set_major_formatter(dates.DateFormatter('%H:%M'))

plt.show()

正如你所见,滴答声甚至没有出现。例如,如何每两小时添加主刻度和标签,每10分钟添加次刻度

虽然我不知道根本问题是什么,但它似乎与使用的软件包版本有关。当我使用较旧的python发行版(matplotlib 1.5.1、numpy 1.11.1、pandas 0.18.1和python 2.7.12)运行您的示例时,我得到了一个没有刻度的绘图,正如您所描述的

然而,我可以得到一个正确的刻度图

通过使用最新的python发行版(matplot 2.0.1、numpy 1.12.1、pandas 0.19.1和python 3.6.1)运行下面的代码


谢谢你检查。也许您也想看看这个:对于Python 3.6.4(64位)、pandas 0.22.0、numpy 1.14.2和matplotlib 2.2.2,这对我来说是失败的
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates

timestamps = pd.date_range(start="2017-05-08", freq="10T", periods=6*6)
timedeltas = timestamps - pd.to_datetime("2017-05-08")
yy = np.random.random((len(timedeltas),10))
df = pd.DataFrame(data=yy, index=timedeltas)

fig,axes=plt.subplots()
axes.plot_date(df.index, df.values, '-')

axes.xaxis.set_major_locator(dates.HourLocator(byhour=range(0,24,2)))
axes.xaxis.set_minor_locator(dates.MinuteLocator(byminute=range(0,24*60,10)))
axes.xaxis.set_major_formatter(dates.DateFormatter('%H:%M'))

plt.show()