在Pandas的条形图中显示日期的最佳方法

时间:2019-01-30 16:42:47

标签: pandas date matplotlib

我创建一个条形图,如下所示: enter image description here

但是由于每个x轴标签都是一月的一天(例如1、3、4、5、7、8等),所以我认为最好的显示方式是

__________________________________________________  x axis
Jan   1   3   4   5   7   8  ...
2019

但是我不知道如何用熊猫来做到这一点。

这是我的代码:

import pandas as pd
import matplotlib.plt as plt    

df = pd.read_excel('solved.xlsx', sheetname="Jan")

fig, ax = plt.subplots()

df_plot=df.plot(x='Date', y=['Solved', 'POT'], ax=ax, kind='bar', 
        width=0.9, color=('#ffc114','#0098c9'), label=('Solved','POT'))


def line_format(label):
"""
Convert time label to the format of pandas line plot
"""
month = label.month_name()[:3]
if month == 'Jan':
    month += f'\n{label.year}'
return month

ax.set_xticklabels(map(lambda x: line_format(x), df.Date))   

此功能是此处提供的解决方案:Pandas bar plot changes date format

我不知道如何修改它以获得我想要的轴

我的数据示例已解决。xlsx:

Date       Q    A    B  Solved POT
2019-01-04 Q4   11   9    14    5 
2019-01-05 Q4   9    11   14    5  
2019-01-08 Q4   11   18   10    6 
2019-01-09 Q4   18   19   18    5

1 个答案:

答案 0 :(得分:1)

我找到了解决方法:

import pandas as pd
import matplotlib.plt as plt    

df = pd.read_excel('solved.xlsx', sheetname="Jan")

fig, ax = plt.subplots()

df_plot=df.plot(x='Date', y=['Solved', 'POT'], ax=ax, kind='bar', 
        width=0.9, color=('#ffc114','#0098c9'), label=('Solved','POT'))


def line_format(label):
"""
Convert time label to the format of pandas line plot
"""
day = label.day
if day == 2:
    day = str(day) + f'\n{label.month_name()[:3]}'
return day

ax.set_xticklabels(map(lambda x: line_format(x), df.Date)) 

plt.show()

在我的特定情况下,我没有日期2019-01-01。所以对我来说第一天是1月2日

enter image description here