Python 我怎么用这个画一个折线图?
我已导入seaborn并键入以下内容:Python 我怎么用这个画一个折线图?,python,dataframe,matplotlib,seaborn,Python,Dataframe,Matplotlib,Seaborn,我已导入seaborn并键入以下内容: Bunker2019_Jan_to_Jun.plot(x='2019', y='Total') Bunker2019_Jan_to_Jun.plot(x='2019', y='MGO') 它显示了两个图表。有没有办法显示2019年1月至12月和2020年1月至6月的日期?如果您喜欢在同一个图上显示,您需要组合数据框,不太确定2019列的日期或字符串是什么?因此,下面我尝试创建一个类似您的data.frame: import seaborn as sns
Bunker2019_Jan_to_Jun.plot(x='2019', y='Total')
Bunker2019_Jan_to_Jun.plot(x='2019', y='MGO')
它显示了两个图表。有没有办法显示2019年1月至12月和2020年1月至6月的日期?如果您喜欢在同一个图上显示,您需要组合数据框,不太确定2019列的日期或字符串是什么?因此,下面我尝试创建一个类似您的data.frame:
import seaborn as sns
import matplotlib. pyplot as plt
import pandas as pd
import numpy as np
mths = pd.date_range(start='1/1/2019', periods=12,freq="M").strftime("%b").to_list()
Bunker2019 = pd.DataFrame({'2019':mths,'Total':np.random.uniform(0,1,12),
'MGO':np.random.uniform(0,1,12)})
Bunker2020 = pd.DataFrame({'2020':mths,'Total':np.random.uniform(0,1,12),
'MGO':np.random.uniform(0,1,12)})
添加年份以创建新日期的简单方法:
Bunker2019['Date'] = '2019_'+ Bunker2019['2019'].astype(str)
Bunker2020['Date'] = '2020_'+ Bunker2020['2020'].astype(str)
我们浓缩并融化,设定订单:
df = pd.concat([Bunker2019[['Date','Total','MGO']],Bunker2020[['Date','Total','MGO']]])
df = df.melt(id_vars='Date')
df['Date'] = pd.Categorical(df['Date'],categories=df['Date'].unique(),ordered=True)
所以现在它是一个长格式,包含2020年和2019年的信息:
Date variable value
0 2019_Jan Total 0.187751
1 2019_Feb Total 0.091374
2 2019_Mar Total 0.929739
3 2019_Apr Total 0.621981
4 2019_May Total 0.371236
5 2019_Jun Total 0.027078
6 2019_Jul Total 0.719046
7 2019_Aug Total 0.138531
现在来绘制:
plt.figure(figsize=(12,5))
ax = sns.lineplot(data=df,x='Date',y='value',hue='variable')
sns.scatterplot(data=df,x='Date',y='value',hue='variable',ax=ax,legend=False)
plt.xticks(rotation=65, horizontalalignment='right')
plt.show()
我将源数据帧创建为:
Month MGO MFO
0 2019-01 79.1 85.0
1 2019-02 69.9 91.2
2 2019-03 68.9 90.4
3 2019-04 71.1 87.0
4 2019-05 75.9 85.6
5 2019-06 60.9 82.1
6 2019-07 68.4 75.0
7 2019-08 75.8 60.7
8 2019-09 82.0 58.8
9 2019-10 95.3 56.6
10 2019-11 90.2 59.7
11 2019-12 86.5 57.7
12 2020-01 79.1 50.0
13 2020-02 88.9 52.2
14 2020-03 74.9 54.4
15 2020-04 87.1 51.0
16 2020-05 92.9 52.6
17 2020-06 105.9 53.1
目前,月份列为字符串。
如果有两个独立的源数据帧,请将它们连接起来
第一个处理步骤是将Month列转换为datetime
键入并将其设置为索引:
df.Month = pd.to_datetime(df.Month)
df.set_index('Month', inplace=True)
第一个更直接的可能性是创建
该图为:
df.plot(style='-x');
对于我的数据样本,我得到:
第二种可能性是生成具有平滑线条的图片。
为此,可以在单个axex中绘制两个绘图:
第一条平滑线,来自重新采样的数据帧,带有
插值,但没有标记,因为现在有更多的点,
第二个标记,取自原始数据帧,
两者都有相同的颜色列表。
执行此操作的代码是:
fig, ax = plt.subplots()
color = ['blue', 'orange']
df.resample('D').interpolate('quadratic').plot(ax=ax, color=color)
df.plot(ax=ax, marker='x', linestyle='None', legend=False, color=color);
这一次的结果是: