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