使用seaborn,pandas和datetime错误的每月线图

问题描述 投票:0回答:1

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

Almost right

我的代码目前看起来像这样:

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

结果如下:

enter image description here

显然,这个图表有多个问题。图x轴应该从1月开始,数据框内的值将在几个月内堆叠(?),而df.head(1100)的比例不应包括12月或9月的月份。

Dataframe的第一行如下所示:

enter image description here

将日期作为日期时间。

我错过了什么,它没有按照我想要的方式运作?

python pandas seaborn
1个回答
0
投票

在绘图中将Month列转换为ordered categoricals以获得轴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")

graph

© www.soinside.com 2019 - 2024. All rights reserved.