Python 在使用pandas plot方法创建的图表上设置x轴格式

Python 在使用pandas plot方法创建的图表上设置x轴格式,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,plot是从数据帧打印数据的一种方便方法。但是,我不明白如何使用此方法格式化轴。比如说, import pandas as pd import datetime df = pd.DataFrame(index = [datetime.datetime(2016, 7, 2, 0, 0), datetime.datetime(2016, 8, 6, 0, 0), datetime.datetime(2016, 9,

plot是从数据帧打印数据的一种方便方法。但是,我不明白如何使用此方法格式化轴。比如说,

import pandas as pd
import datetime

df = pd.DataFrame(index =  [datetime.datetime(2016, 7, 2, 0, 0),
                    datetime.datetime(2016, 8, 6, 0, 0),
                    datetime.datetime(2016, 9, 13, 0, 0),
                    datetime.datetime(2016, 10, 26, 0, 0),
                    datetime.datetime(2016, 11, 2, 0, 0)],
                    data = {'total' : [5, 3, 1, 0, 2]})

df
输出

          total
2016-07-02  5
2016-08-06  3
2016-09-13  1
2016-10-26  0
2016-11-02  2
现在使用熊猫绘图方法进行绘图:

df.plot(kind='bar')

我更希望x轴的标签是月-七月-八月-九月-十月-十一月的三个字母格式


pandas plot方法可以实现这一点,还是我应该使用matplotlib构建图表?

如果您想将图表显示为分类条形图,即独立于实际日期的等距条形图,您只需重新格式化Xticklabel

f = lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').strftime('%b')
ax.set_xticklabels([ f(x.get_text()) for x in ax.get_xticklabels()])
其中,
%b
是月份的缩写名称,ax是绘图轴

完整示例:

import pandas as pd
import datetime
import matplotlib.pyplot as plt

df = pd.DataFrame(index =  [datetime.datetime(2016, 7, 2, 0, 0),
                    datetime.datetime(2016, 8, 6, 0, 0),
                    datetime.datetime(2016, 9, 13, 0, 0),
                    datetime.datetime(2016, 10, 26, 0, 0),
                    datetime.datetime(2016, 11, 2, 0, 0)],
                    data = {'total' : [5, 3, 1, 0, 2]})

ax = df.plot(kind='bar')

f = lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').strftime('%b')
ax.set_xticklabels([ f(x.get_text()) for x in ax.get_xticklabels()])

plt.show()

我找到了一种更简单的方法,将x标签改为仅月份

import pandas as pd
import datetime

df = pd.DataFrame(index =  [datetime.datetime(2016, 7, 2, 0, 0),
                    datetime.datetime(2016, 8, 6, 0, 0),
                    datetime.datetime(2016, 9, 13, 0, 0),
                    datetime.datetime(2016, 10, 26, 0, 0),
                    datetime.datetime(2016, 11, 2, 0, 0)],
                    data = {'total' : [5, 3, 1, 0, 2]})

ax = df.plot(kind='bar')
x_labels = df.index.strftime('%b')
ax.set_xticklabels(x_labels)

plt.show()