【问题标题】:Plotting multiple subplots, each showing relation between two columns of a pandas DataFrame using Seaborn绘制多个子图,每个子图都显示了使用 Seaborn 的 pandas DataFrame 的两列之间的关系
【发布时间】:2021-01-14 11:10:33
【问题描述】:

我有一个 pandas DataFrame 如下:

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

我希望在同一个图表下绘制多个(在本例中为两个)seaborn lineplots,作为子图。 我想在 x-axis 上保持 depth 参数不变,但根据 y-axis 参数改变其他列值。

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

parameter1 vs depth

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

parameter2 vs depth

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

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

【问题讨论】:

  • sns.relplotFacetGrid

标签: python pandas dataframe seaborn


【解决方案1】:

要使用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')

【讨论】:

    【解决方案2】:

    如果使用pandas 进行绘图是一个选项,则可以:

    df.plot(x= 'depth', layout=(1,2),subplots=True, sharey=True, figsize=(10,4))
    plt.show()
    

    输出

    此外,如果您愿意,可以在顶部添加 seaborn 样式:

    sns.set_style('darkgrid')
    df.plot(x= 'depth', layout=(1,2),subplots=True,sharey=True, figsize=(10.5,4))
    plt.show()
    

    输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 2018-12-09
      • 1970-01-01
      • 2018-02-13
      • 2017-12-09
      • 2019-01-15
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多