繁体   English   中英

使用Seaborn,Pandas和DateTime的错误每月线图

[英]Wrong monthly lineplot using seaborn, pandas and datetime

我正在尝试创建以下图表,但是将月份写成xticks而不是整数:

几乎正确

我的代码当前如下所示:

plt.figure(figsize=(10,5))
sns.lineplot(x="Month",y="DHN",data = df.head(1100),color="BLACK")
sns.lineplot(x="Month",y="Heat Loss",data = df.head(1100),color ="RED")

结果是:

在此处输入图片说明

显然,此图有很多问题。 Diagram x轴应从一月开始,数据df.head(1100)的值将堆叠几个月(?),而df.head(1100)的小数df.head(1100)不应包含12月或9月这样的月份。

数据框的第一行如下所示:

在此处输入图片说明

以Date作为日期时间。

我想念的是它没有按照我想要的方式工作吗?

Month列转换为ordered categorical s,以在绘图中沿x轴正确排序:

cats = ['Jan', 'Feb', 'Mar', 'Apr','May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
df['Month'] = pd.Categorical(df['Month'], ordered=True, categories=cats)

plt.figure(figsize=(10,5))
sns.lineplot(x="Month",y="DHN",data = df.head(1100),color="BLACK")
sns.lineplot(x="Month",y="Heat Loss",data = df.head(1100),color ="RED")

样品

np.random.seed(123)

def random_dates(start, end, n=100):

    start_u = start.value//10**9
    end_u = end.value//10**9

    return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s')

start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2017-01-20')
df = pd.DataFrame({'Date':random_dates(start, end),
                   'DHN':np.random.randint(500, size=100),
                   'Heat Loss':np.random.randint(50, size=100)})
df['Month'] = df['Date'].dt.strftime('%b')
df = df.sort_values('Date')
print (df.head())

                  Date  DHN  Heat Loss Month
55 2015-01-07 20:29:22  296         23   Jan
29 2015-01-08 13:49:04  486         18   Jan
36 2015-01-15 23:32:55  294          9   Jan
59 2015-01-19 10:33:39  256          5   Jan
72 2015-01-19 19:48:43  254          3   Jan

cats = ['Jan', 'Feb', 'Mar', 'Apr','May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
df['Month'] = pd.Categorical(df['Month'], ordered=True, categories=cats)

plt.figure(figsize=(10,5))
sns.lineplot(x="Month",y="DHN",data = df.head(1100),color="BLACK")
sns.lineplot(x="Month",y="Heat Loss",data = df.head(1100),color ="RED")

图形

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM