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

edg*_*ase 8 python plot matplotlib pandas

pandas.DataFrame.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
Run Code Online (Sandbox Code Playgroud)

产量

          total
2016-07-02  5
2016-08-06  3
2016-09-13  1
2016-10-26  0
2016-11-02  2
Run Code Online (Sandbox Code Playgroud)

现在用熊猫绘图方法绘图:

df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

示例条形图

我希望x轴只有标签为月份的三字母格式 - 7月8月9月10月11月.

这可能与pandas plot方法有关,还是应该用matplotlib构建图表?

Imp*_*est 8

如果要将图形显示为分类条形图,即与实际日期无关的等距条形图,则可以重新格式化xticklabels,

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()])
Run Code Online (Sandbox Code Playgroud)

%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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


edg*_*ase 7

我发现了一种将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()
Run Code Online (Sandbox Code Playgroud)

图表示例