条形图:如何在x轴上获得与时间序列图表中相同的日期格式?

时间:2017-08-10 09:54:51

标签: python pandas matplotlib

我有一个带有随机数的pandas数据帧,其中索引的类型为dtype='datetime64[ns]。您将在问题的最后找到可重现的代码。

enter image description here

当我使用ax.dfplot()进行绘制时,我得到了一个格式精美的x轴,如下所示:

enter image description here

我想制作一个条形图,但是当我使用ax = df.plot(kind = 'bar')时,x轴会搞砸:

enter image description here

我该如何改变?

感谢您的任何建议!

输入数据框和两个第一个图表的可重现代码:

import pandas as pd
import numpy as np
import matplotlib.dates as mdates
# Dataframe with 1 or zero
np.random.seed(123)
rows = 10
df = pd.DataFrame(np.random.randint(90,110,size=(rows, 2)), columns=list('AB'))
datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist 
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
print(df.head(10))
#print(df)

# Option 1
# -Time series
# -kind is undefined
title = 'time series'
ax = df.plot(title = title, fontsize = 10)
#ax.legend().set_visible(legend)


# Option 2
# -Bar chart
# -kind is defined as bar
title = 'Bar'
ax = df.plot(title = title, fontsize = 10, kind = 'bar')

这是我到目前为止所尝试的内容:

Here是一个有点类似的问题,但我遇到了那里提供的可重现片段的问题。也许是一个版本问题,因为它已经有几年了?

我还能够使用建议here至少改进格式:

title = 'Bar'
ax = df.plot(title = title, fontsize = 10, kind = 'bar')

xtl=[item.get_text()[:10] for item in ax.get_xticklabels()]
_=ax.set_xticklabels(xtl)

enter image description here

我对这些建议here寄予厚望,因为我似乎至少能够在mdates.DateFormatter('%d')部分显示数月(使用m代替)。但是我在显示结果时遇到了问题:

title = 'Bar'
ax = df.plot(title = title, fontsize = 10, kind = 'bar')
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

我只是得到了这个:

enter image description here

0 个答案:

没有答案