我正在尝试创建以下图表,但将写入的月份作为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")
结果如下:
显然,这个图表有多个问题。图x轴应该从1月开始,数据框内的值将在几个月内堆叠(?),而df.head(1100)
的比例不应包括12月或9月的月份。
Dataframe的第一行如下所示:
将日期作为日期时间。
我错过了什么,它没有按照我想要的方式运作?
在绘图中将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")