首页 > 解决方案 > 绘制多个子图,每个子图都显示使用 Seaborn 的 pandas DataFrame 的两列之间的关系

问题描述

我有一个熊猫 数据框,如下所示:

df=pd.DataFrame({'depth':[499,500,501,502,503],'parameter1':[25,29,24,23,25],'parameter2':[72,80,65,64,77]})

我希望在同一图表下绘制多个(在这种情况下为两个)seaborn 线图,作为子图我想在x 轴上保持深度参数不变,但根据其他列值改变y 轴参数。

sns.relplot(x='depth',y="parameter1",kind='line',data=df)

参数1与深度

sns.relplot(x='depth',y="parameter2",kind='line',data=df)

参数2与深度

我已经尝试使用seaborn.FacetGrid(),但我没有得到正确的结果。

让我知道如何将这些图绘制为单个图下的子图,而无需单独定义它们。

标签: pythonpandasdataframeseaborn

解决方案


要使用FacetGrid,您必须使用 将数据框转换为“长格式” melt()

df=pd.DataFrame({'depth':[499,500,501,502,503],'parameter1':[25,29,24,23,25],'parameter2':[72,80,65,64,77]})
df2 = df.melt(id_vars=['depth'])

g = sns.FacetGrid(data=df2, col='variable')
g.map_dataframe(sns.lineplot, x='depth', y='value')

在此处输入图像描述

请注意,可以更简单地使用relplot而不是创建FacetGrid“手动”来实现相同的输出

sns.relplot(data=df2, x='depth', y='value', col='variable', kind='line')

推荐阅读