如何解决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 中应用这些过滤器?
如何在单个 for 循环中为不同参数绘制相同类型的图?
解决方法
通常绘制构面的方式是将您的 analysis_df
“融合”到 id/variable/value 列中。
-
split()
将index
列转化为Company
和Parameter
,稍后我们将在融合时将它们用作 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 # ...
-
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
-
relplot()
CAGR
vsCompany
(由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},)
重现此图的示例数据:
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 举报,一经查实,本站将立刻删除。