【发布时间】:2021-04-22 13:57:14
【问题描述】:
我正在尽力将以下四个图组合成三个图,并使用颜色和影线标记显示 (a) 和 (b) 与 (c) 和 (d) 的不同之处。所有四个绿色图都是相同的参数,只是相应地分组。橙色和蓝色也一样。
以下是我使用melt 函数创建每个单独图的方式:
df_CohDmg
Out[13]:
Region Age60 CohDmg value
0 Posterior Age $\leq$ 60 tn 1844.377999
1 Posterior Age $\leq$ 60 tn 654.815766
2 Equator Age $\leq$ 60 tn 287073.028315
3 Equator Age $\leq$ 60 tn 301519.815540
4 Posterior Age $\leq$ 60 tn 838.798937
.. ... ... ... ...
112 Posterior Age $\leq$ 60 tt 11185.849816
113 Equator Age $>$ 60 tt 15345.033316
114 Posterior Age $>$ 60 tt 62.232998
115 Equator Age $>$ 60 tt 490.447922
116 Equator Age $>$ 60 tt 11468.986366
[117 rows x 4 columns]
df_CohDmg = pd.melt(md, id_vars=[R, A60],
value_vars=['tn', 'ts', 'tt'],
var_name='CohDmg')
def CohDmgDistPlot(dataSubset=None, figName=None, hue=None, hue_order=None,
labels=None):
f, ax = plt.subplots()
sns.set_context("paper", rc={"font.size":12, "axes.titlesize":8,
"axes.labelsize":12})
ax = sns.displot(data=dataSubset, hue=hue, hue_order=hue_order,
x='value', kind="kde", fill=True, legend=False, height=5,
aspect=1.6, bw_adjust=1, log_scale=True)
ax.set(xlabel='Cohesive Damage Initiation Parameters [Pa]',
ylabel='Kernel Density Estimation')
if labels != None:
# Legend
plt.legend(labels=labels, loc='best').set_title("Parameter")
# Set limits so all plots are the same scale
ax.set(ylim=(0, 0.3))
ax.set(xlim=(8*10**-1, 4*10**7))
ax.savefig(os.path.join(SF, 'Cohesive_Damage_Initiation_Distribution' +
'{}.pdf'.format(figName)),
bbox_inches='tight')
plt.close(f)
我在这里定义的这个函数是我调用每个数据子集的方式:
# Simplify plots
labels = [r'$t_{n}$', r'$t_{s}$', r'$t_{t}$']
hue = 'CohDmg'
hue_order = [Eq, Po]
CohDmgDistPlot(df_CohDmg, figName='', labels=labels, hue=hue)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Po)], figName='_Posterior',
hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Eq)], figName='_Equator',
hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[A60] == Aleq60)], figName='_AgeLeq60',
hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[A60] == Ag60)], figName='_Ageg60',
hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Po) & (df_CohDmg[A60] == Aleq60)],
figName='_Posterior_Leq60', hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Po) & (df_CohDmg[A60] == Ag60)],
figName='_Posterior_g60', hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Eq) & (df_CohDmg[A60] == Aleq60)],
figName='_Equator_Leq60', hue=hue, labels=labels)
CohDmgDistPlot(df_CohDmg[(df_CohDmg[R] == Eq) & (df_CohDmg[A60] == Ag60)],
figName='_Equator_g60', hue=hue, labels=labels)
理想情况下,我会使用成对的颜色来表示 (a) 和 (b),并使用阴影标记来表示 (b) 和 (d)。
非常感谢您,因为我能够弄清楚这一点。
【问题讨论】:
-
我唯一能想到的就是
melt将所有内容放在一个列中? -
我是否理解正确,您想将 12 条 kde 曲线绘制到单个子图上?当它们重叠这么多时,那不会非常拥挤吗?
-
所以在考虑了更多情况之后,我只需要在一个绘图上使用 4 条 kde 曲线(所有四个绿色、蓝色和橙色)。本质上是三个情节。我会更新问题。
标签: pandas matplotlib seaborn