用于绘制多个参数的 Seaborn 线图
Seaborn Line Plot for plotting multiple parameters
我有如下数据集,
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、profit 等。我需要绘制如下:
修订:
- 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、profit 到 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
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},
)
重现此图的样本数据:
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,1,20,50
c2_eps,21,20,25
c3_eps,31,20,37
c1_pft,20,1,10
c2_pft,25,20,14
c3_pft,11,55,17
'''
analysis_df = pd.read_csv(io.StringIO(csv))
我有如下数据集,
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、profit 等。我需要绘制如下:
修订:
- 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、profit 到 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,1,20,50
c2_eps,21,20,25
c3_eps,31,20,37
c1_pft,20,1,10
c2_pft,25,20,14
c3_pft,11,55,17
'''
analysis_df = pd.read_csv(io.StringIO(csv))