【问题标题】:Matplotlib Line vs. Bar plot DateTime axis formattingMatplotlib Line vs. Bar plot DateTime 轴格式
【发布时间】:2020-08-01 14:35:41
【问题描述】:

我有一个带有 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 方法绘制的格式好。

【问题讨论】:

  • @Rajat:谢谢。是的,我知道我可以手动选择 DateTime 格式。这样做有两个问题:首先,它需要大量的工作。其次,如何生成与线图相同的漂亮格式?
  • 有没有办法将线图生成的轴重新用于条形图?我尝试这样做(通过从 xticks 复制位置和格式),但我没有成功。我认为原因是条形图的刻度结构与折线图不同。

标签: pandas matplotlib plot xticks


【解决方案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()

【讨论】:

  • 是的,这也是关于我能走多远。它仍然不如线图中的那个好......
猜你喜欢
  • 2015-08-18
  • 2013-05-20
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 2019-05-27
相关资源
最近更新 更多