代码之家  ›  专栏  ›  技术社区  ›  nerd

使用sns进行单独绘图。distplot()按特定列的值分组

  •  0
  • nerd  · 技术社区  · 2 年前

    当我运行下面的代码时,我得到了由组分隔的4个不同的直方图。如何使用4种不同的 sns.distplot() 也被他们的团体分开了?

    df = pd.DataFrame({
        "group": [1, 1, 2, 2, 3, 3, 4, 4],
        "similarity": [0.1, 0.2, 0.35, 0.6, 0.7, 0.25, 0.15, 0.55]
    })
    
    df['similarity'].hist(by=df['group'])
    

    enter image description here

    1 回复  |  直到 2 年前
        1
  •  1
  •   Quang Hoang    2 年前

    您可以使用 FacetGrid 来自seaborn:

    import seaborn as sns
    
    g = sns.FacetGrid(data=df, col='group', col_wrap=2)
    g.map(sns.histplot, 'similarity')
    

    输出:

    enter image description here

        2
  •  1
  •   Trenton McKinney ivirshup    2 年前
    • seaborn 是的高级api matplotlib pandas 使用 matplotlib 作为默认打印后端。
    • 从…起 seaborn v0.11.2 , sns.distplot 已弃用,并且根据 警告 在文档中,不建议直接使用 FacetGrid .
    • sns。距离图 替换为轴级别功能 sns.histplot ,以及图形级功能 sns.displot .
    • 另请参见 seaborn histplot and displot output doesn't match
    • 生成绘图很容易,但不一定要生成正确的绘图,除非您知道每个api的不同参数默认值。
      • 请注意 common_bins True Fales .
    • 在中测试 python 3.10 , pandas 1.4.2 , matplotlib 3.5.1 , seaborn 0.11.2

    common_bins=False

    import seaborn as sns
    
    # plot
    g = sns.displot(data=df, x='similarity', col='group', col_wrap=2, common_bins=False, height=4)
    

    enter image description here

    common_bins=True (4)

    • sns。置换 pandas.DataFrame.plot 具有 kind='hist' bins=4 生成相同的绘图。
    g = sns.displot(data=df, x='similarity', col='group', col_wrap=2, common_bins=True, bins=4, height=4)
    

    enter image description here

    # reshape the dataframe to a wide format
    dfp = df.pivot(columns='group', values='similarity')
    
    axes = dfp.plot(kind='hist', subplots=True, layout=(2, 2), figsize=(9, 9), ec='k', bins=4, sharey=True)
    

    enter image description here