微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Seaborn Line Plot 用于绘制多个参数

如何解决Seaborn Line Plot 用于绘制多个参数

我有如下数据集,

index 10_YR_CAGR 5_YR_CAGR 1_YR_CAGR
c1_rev 20.5 21.5 31.5
c2_rev 20.5 22.5 24
c3_rev 21 24 27
c4_rev 20 26 30
c5_rev 24 19 15
c1_eps 21 22 23
c2_eps 21 24 25

此数据有 5 家公司及其参数,如 rev、eps、利润等。我需要绘制如下图:

转:

  • x_axis-> index_col c1_rev,...c5_rev
  • y_axis -> 10_YR_CAGR .. 1_YR_CAGR

每股收益:

  • x_axis -> index_col: c1_eps,...c5_eps
  • y_axis -> 10_YR_CAGR,... 1_YR_CAGR

等等...

我尝试过以下代码

eps = analysis_df[analysis_df.index.str.contains('eps',regex=True)]

for i1 in eps.columns[eps.columns!='index']:
    sns.lineplot(x="index",y=i1,data=eps,label=i1)

我必须从源制作一个数据框,然后循环它。我如何尝试创建一个从主源数据帧本身循环的 for 循环?

不是为单独的参数创建循环,我如何从主源数据帧循环以创建包含 rev、eps、利润到 facegrid 参数等参数的图表?如何在 facetgrid 中应用这些过滤器?

我上面代码的示例输出

enter image description here

如何在单个 for 循环中为不同参数绘制相同类型的图?

解决方法

通常绘制构面的方式是将您的 analysis_df“融合”到 id/variable/value 列中。

  1. split()index 列转化为 CompanyParameter,稍后我们将在融合时将它们用作 id 列:

    analysis_df[['Company','Parameter']] = analysis_df['index'].str.split('_',expand=True)
    
    #      index  10_YR_CAGR  5_YR_CAGR  1_YR_CAGR  Company  Parameter
    #  0  c1_rev         100         21          1       c1        rev
    #  1  c2_rev           1         32         24       c2        rev
    # ...
    
  2. melt() CAGR 列:

    melted = analysis_df.melt(
        id_vars=['Company','Parameter'],value_vars=['10_YR_CAGR','5_YR_CAGR','1_YR_CAGR'],var_name='Period',value_name='CAGR',)
    
    #      Company  Parameter      Period  CAGR
    #  0        c1        rev  10_YR_CAGR   100
    #  1        c2        rev  10_YR_CAGR     1
    #  2        c3        rev  10_YR_CAGR    14
    #  3        c1        eps  10_YR_CAGR     1
    # ...
    # 25        c2        pft   1_YR_CAGR    14
    # 26        c3        pft   1_YR_CAGR    17
    
  3. relplot() CAGR vs Company(由 Period 着色)使用 Parameter 数据框的每个 melted

    sns.relplot(
        data=melted,kind='line',col='Parameter',x='Company',y='CAGR',hue='Period',col_wrap=1,facet_kws={'sharex': False,'sharey': False},)
    

relplot 3x1

重现此图的示例数据:

import io
import pandas as pd
csv = '''
index,10_YR_CAGR,5_YR_CAGR,1_YR_CAGR
c1_rev,100,21,1
c2_rev,1,32,24
c3_rev,14,23,7
c1_eps,20,50
c2_eps,25
c3_eps,31,37
c1_pft,10
c2_pft,25,14
c3_pft,11,55,17
'''
analysis_df = pd.read_csv(io.StringIO(csv))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。