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
输出
total
2016-07-02 5
2016-08-06 3
2016-09-13 1
2016-10-26 0
2016-11-02 2
现在使用pandas plot方法绘图:
df.plot(kind='bar')
我希望x轴的标签为月份的三字母格式 - 7月8月9月10月11月。
使用pandas plot方法可以实现这一点,还是应该使用matplotlib构建图表?
答案 0 :(得分: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()])
其中%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()
答案 1 :(得分:4)
我找到了一种更简单的方法来将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()