Pandas Matplotlib线条与条形图日期时间轴格式

Pandas Matplotlib线条与条形图日期时间轴格式,pandas,matplotlib,plot,xticks,Pandas,Matplotlib,Plot,Xticks,我有一个带有日期时间索引的数据帧: 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轴:

我有一个带有日期时间索引的数据帧:

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)),

这相当令人不安,因为它是同一个数据帧。 我想要的是条形图,但要有格式良好的日期时间轴

有没有一个简单的方法来实现这一点?
我尝试直接使用bar命令,但这会产生另一种x轴格式,不如使用pandas方法打印生成的格式好

您可以这样做:

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()
[23]中的
fig,ax=plt.子图(figsize=(12,12))
属性Qt::AA_enableHighdDiscaling必须在创建QCoreApplication之前设置。
[27]中:最大杆(df.index.values,
…:df[0],
…:颜色(紫色)
出[27]:
在[29]中:将matplotlib.dates导入为mdates
…:从matplotlib.dates导入日期格式化程序
在[30]中:日期形式=日期格式化程序(“%m-%d”)
…:ax.xaxis.set\u major\u格式化程序(日期\u表单)
...:
…:#使用(间隔=1)确保每周都有一个大刻度
…:ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))
…:plt.show()

这应该对你有帮助:@Rajat:谢谢。是的,我知道我可以手动选择日期时间格式。这有两个问题:第一,它需要大量的工作。第二,如何生成与线形图相同的良好格式?是否有方法获取线形图生成的轴并将其重新用于条形图?我尝试过这样做(通过从XTICK复制位置和格式),但没有成功。我认为原因是条形图的刻度结构不同于线形图。也许这会有帮助。是的,这也是关于我走了多远。它仍然没有直线图中的那个好。。。