无法在pandas条形图中调整x轴DateFormat

KLI*_*KLI 8 matplotlib pandas

我想data用matplotlib 绘制一个pandas时间序列对象.对于简单的折线图data.plot(),我能够成功更改x轴日期格式ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S')).

但是,我无法对条形图进行相同的操作data.plot(kind='bar').图表不会出现.有没有办法改变熊猫条形图的数据格式?我知道我可以用plt.bar方法创建一个图表,但是我需要使用pandas堆积条形图来获得更复杂的数据.

import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import pandas as pd
import datetime as dt
import time

n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
data=pd.Series(values, index=dates)

fig=figure(figsize(5,5))
ax=fig.add_subplot(111)
data.plot(kind='bar')
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud)

Rut*_*ies 17

由于Pandas只使用matplotlib,您当然可以使用matplotlib创建相同的(堆叠)条形图.没有理由为什么你只能使用熊猫.

但是在这种情况下它不会有所帮助.Matplotlib bar()将xvalues从日期更改为浮点数,因此DateFormatter不再起作用.您可以查看xticks ax.get_xticks().

我不知道如何制作xticks日期,但你可以自己覆盖xticklabels:

ax.set_xticklabels([dt.strftime('%Y-%m-%d %H:%M:%S') for dt in data.index.to_pydatetime()])
Run Code Online (Sandbox Code Playgroud)