Python Dataframe无法正确设置matplotlib使用的索引

Python Dataframe无法正确设置matplotlib使用的索引,python,pandas,matplotlib,Python,Pandas,Matplotlib,以下 from datetime import datetime import pandas as pd from pandas import Timestamp import matplotlib import matplotlib.pylab as plt import matplotlib.dates as mdates #%matplotlib inline sorted(df.columns) df = df[df.region=="US"] df.set_ind

以下

from datetime import datetime
import pandas as pd
from pandas import Timestamp
import matplotlib
import matplotlib.pylab as plt
import matplotlib.dates as mdates
#%matplotlib inline 
sorted(df.columns)
df = df[df.region=="US"]
df.set_index('date')
df.head(50)
def plot_cat(df_input, cat, color="green"):
    axis = df_input[cat].plot(figsize=(10,6), color=color, fontsize=10, zorder=2)
    axis.set_xlabel("date", fontsize=font_size)
    axis.set_ylabel("", fontsize=font_size); 
    axis.axhline(y=0)
plot_cat(df, "retail", "red") 
使用以下数据

生成的图形不使用x轴的“日期”

虽然我将索引设置为date,但似乎并没有这样做。上述测向头(50)的输出如下:

    region  date    retail
0   US  2020-02-15  5.0
1   US  2020-02-16  8.0
2   US  2020-02-17  5.0
3   US  2020-02-18  0.0
4   US  2020-02-19  3.0
5   US  2020-02-20  1.0
6   US  2020-02-21  3.0
7   US  2020-02-22  9.0
8   US  2020-02-23  6.0
9   US  2020-02-24  3.0
10  US  2020-02-25  4.0
11  US  2020-02-26  8.0
12  US  2020-02-27  9.0
13  US  2020-02-28  10.0
14  US  2020-02-29  12.0
我不确定为什么没有将其设置为索引,我相信这就是matplot图没有正确的x轴的原因


在任何阶段都没有警告消息或错误。

将set_索引行更改为:

df = df.set_index('date')
或:


@gtomer的回答应该能解决您的问题。另一个不更改数据的选项是将
x
传递到
plot

def plot_cat(df_input, cat, color="green"):
    # change here
    axis = df_input.plot(x='date', y=cat,
                         figsize=(10,6), color=color, 
                         fontsize=10, zorder=2)

    axis.set_xlabel("date", fontsize=font_size)
    axis.set_ylabel("", fontsize=font_size); 
    axis.axhline(y=0)

plot_cat(df, 'retail', 'red')
输出:


好的,当我这样做时,似乎什么都没有改变。不幸的是,当我将代码更改为df=df.set_index('date')时,我收到了错误消息“float()参数必须是字符串或数字,而不是句号”。请检查您的代码。我用示例数据更新了代码输出的答案。
def plot_cat(df_input, cat, color="green"):
    # change here
    axis = df_input.plot(x='date', y=cat,
                         figsize=(10,6), color=color, 
                         fontsize=10, zorder=2)

    axis.set_xlabel("date", fontsize=font_size)
    axis.set_ylabel("", fontsize=font_size); 
    axis.axhline(y=0)

plot_cat(df, 'retail', 'red')