刻度标签在熊猫条形图中重叠

phdoerfler

TL; DR:在熊猫中,如何绘制条形图,使其x轴刻度线标签看起来像折线图的标签?

我制作了一个间隔均匀的时间序列(每天一个项目),可以像这样很好地绘制它:

intensity[350:450].plot()
plt.show()

默认的折线图,带有漂亮的刻度线标签

但是切换到条形图会造成这种混乱:

intensity[350:450].plot(kind = 'bar')
plt.show()

条形图带有重叠的刻度标签

然后,我直接使用matplotlib创建了条形图,但是它缺少熊猫的日期时间序列刻度标签格式化程序:

def bar_chart(series):
    fig, ax = plt.subplots(1)
    ax.bar(series.index, series)
    fig.autofmt_xdate()
    plt.show()

bar_chart(intensity[350:450])

条形图带有任意放置的刻度标签

这是强度系列的摘录:

intensity[390:400]

2017-03-07    3
2017-03-08    0
2017-03-09    3
2017-03-10    0
2017-03-11    0
2017-03-12    0
2017-03-13    2
2017-03-14    0
2017-03-15    3
2017-03-16    0
Freq: D, dtype: int64 

我可以全力以赴,完全手动创建刻度标签,但是我宁愿不必抱着matplotlib并让熊猫做它的工作,并做它在第一个图中所做的工作,但要有条形图。那我该怎么做呢?

认真的重要性

熊猫条形图是分类图。他们为每个类别创建一个勾号(+标签)。如果类别是日期,并且这些日期是连续的,则可以将某些日期排除在外,例如只绘制每五个类别,

ax = series.plot(kind="bar")
ax.set_xticklabels([t if not i%5 else "" for i,t in enumerate(ax.get_xticklabels())])

在此处输入图片说明

相反,matplotlib条形图是数字图。在这里可以应用一个有用的报价器,它对每周,每月或任何需要的日期进行打勾。

此外,matplotlib允许完全控制刻度线位置及其标签。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import dates

index = pd.date_range("2018-01-26", "2018-05-05")
series = pd.Series(np.random.rayleigh(size=100), index=index)

plt.bar(series.index, series.values)
plt.gca().xaxis.set_major_locator(dates.MonthLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter("%b\n%Y"))
plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章