Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎么用这个画一个折线图?_Python_Dataframe_Matplotlib_Seaborn - Fatal编程技术网

Python 我怎么用这个画一个折线图?

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

我已导入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
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);
这一次的结果是: