0

我有一个带有 DateTime 索引的 DataFrame:

import pandas as pd
from random import randrange
dates = pd.date_range(start="2020-02-01",end='2020-04-18',freq='1d')
df = pd.DataFrame(index=dates,data=[randrange(10000) for i in range(78)]

现在,当我将数据绘制为线图时,matplotlib 会生成一个格式良好的 x 轴:

df.plot(figsize=(12,4))

线图

但是,如果我改为绘制条形图,我现在会得到一些非常可怕的东西:

df.plot(kind='bar',figsize=(12,4)),

条形图

这很令人不安,因为它是同一个 DataFrame。我想要的是条形图,但具有格式良好的 DateTime 轴。

有没有简单的方法来实现这一目标?我尝试直接使用 bar 命令,但这会产生另一种 x 轴格式,不如使用 pandas 方法绘制的格式好。

4

1 回答 1

1

你可以这样做:

In [23]: fig, ax = plt.subplots(figsize=(12, 12))
Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created.

In [27]: ax.bar(df.index.values,
    ...:        df[0],
    ...:        color='purple')
Out[27]: <BarContainer object of 78 artists>

In [29]: import matplotlib.dates as mdates
    ...: from matplotlib.dates import DateFormatter

In [30]: date_form = DateFormatter("%m-%d")
    ...: ax.xaxis.set_major_formatter(date_form)
    ...:
    ...: # Ensure a major tick for each week using (interval=1)
    ...: ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))
    ...: plt.show()

在此处输入图像描述

于 2020-04-19T05:08:13.767 回答