我想将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轴绘图:
在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轴的情节。
我想得到%H:%M样式的x轴,有适当的间隔标记,如“15:00,17:00,19:00,21:00”(这里每2个间隔)。我怎么意识到这一点?
答案 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()
,结果如下: