xandis的时间格式在pandas的情节

时间:2016-03-24 01:35:22

标签: python pandas matplotlib plot

我想将pandas DataFrame绘制为x轴具有'%H:%M'风格的折线图。

然而,当我尝试这个时:

import datetime
import pandas as pd
import numpy as np
d = pd.DataFrame([np.random.rand(3) for _ in range(9)])
d.index = [datetime.time(i, 0) for i in range(15,24)]
ax = d.plot(xticks=d.index)
plt.xticks([x.strftime("%H:%M") for x in d.index][0::4])

%H的图表:%M:%s样式x轴绘图:

enter image description here

answer之后,我添加了DateFormatter

import matplotlib.dates as md
d = pd.DataFrame([np.random.rand(3) for _ in range(9)])
d.index = [datetime.time(i, 0) for i in range(15,24)]
ax = d.plot(xticks=d.index)
#plt.xticks([x.strftime("%H:%M") for x in d.index][0::4])
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))

不幸的是,我得到了一个只有00:00 x轴的情节。

enter image description here

我想得到%H:%M样式的x轴,有适当的间隔标记,如“15:00,17:00,19:00,21:00”(这里每2个间隔)。我怎么意识到这一点?

1 个答案:

答案 0 :(得分:0)

我相信这种情况正在发生,因为DateFormatting无法识别" %H:%M"的说明。只需用整数指令%d替换它们,它应该给你想要的结果(或至少你能适应的东西)。在下面的代码修复中,我还为标签添加了旋转,以避免x轴过度混乱:

import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as md
d = pd.DataFrame([np.random.rand(3) for _ in range(9)])
d.index = [datetime.time(i, 0) for i in range(15,24)]
ax = d.plot(xticks=d.index)
plt.xticks(rotation=45)  # Changed here
ax.xaxis.set_major_formatter(md.DateFormatter('%d:%d')) # and here...
plt.show()

编辑:上面的示例仅更改格式化程序的解释器字符串。我没有弄乱数据或其他任何东西。无论如何,理想情况下你应该使用它:

ax.xaxis.set_major_locator(md.HourLocator(byhour=range(0,24,2)))

,实现你想要的。但我刚测试它,它似乎有一个错误。据说我的建议是你将你想要的标签直接解析到xticks。

import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
d = pd.DataFrame([np.random.rand(3) for _ in range(9)])
d.index = [datetime.time(i, 0).hour for i in range(15,24)]
ax = d.plot(xticks=d.index)
plt.xticks([datetime.time(i, 0).hour for i in range(15,24)][0::2],["%d:00"%datetime.time(i, 0).hour for i in range(15,24)][0::2],rotation=45)  # Changed here
plt.show()

,结果如下:

x label with hours with a step of 2