【问题标题】:How to plot each histogram into a grid after grouping?分组后如何将每个直方图绘制成网格?
【发布时间】:2022-01-06 19:43:06
【问题描述】:

我有一个pandas.DataFrame 的表单

index       Var2     Var6
                           
 0         1          100
 1         1          123
 2         2          234
 3         2          456
 4         2          132
 5         2          354
 6         3          153
 7         4          456
 8         4          123
 9         4          125

我想通过对Var2 进行分组来绘制直方图。 根据上面的例子,有 4 个Var2。因此,应该有 4 个直方图。 上面的代码是我用作示例的代码。 实际上,在我的数据中,Var2 有 1 到 144 个,Var6 的数量是随机的。如何绘制 144 的直方图? 那么,如何进行高斯拟合并测量半高全宽(FWHM)?

【问题讨论】:

  • 您可以将.hist() 应用于您的dataFrameGroupby 对象(.groupby(condition) 返回的内容。所以您可以这样做df.groupby(['Var2']).hist()
  • 非常感谢您的帮助。显示了所有 144 个直方图。我有一个问题。有没有办法在一页上显示 12 个水平直方图和 12 个垂直直方图?

标签: python pandas sorting curve-fitting gaussian


【解决方案1】:

要么使用DataFrame.plotsubplots 选项,要么使用seaborn displotcol


DataFrame.plot.hist

  1. 使用DataFrame.pivot_tableVar2 值转换为列:

    pivoted = df.pivot_table(
        index=df.groupby('Var2').cumcount(),
        columns='Var2',
        values='Var6')
    
    # Var2      1      2      3      4
    # 0     100.0  234.0  153.0  456.0
    # 1     123.0  456.0    NaN  123.0
    # 2       NaN  132.0    NaN  125.0
    # 3       NaN  354.0    NaN    NaN
    
  2. 使用DataFrame.plotsubplotslayout 将这些列绘制成子图:

    # adjust the params as needed for your real data
    pivoted.plot.hist(
        subplots=True,
        layout=(2, 2),
        figsize=(8, 8),
        sharey=True)
    


sns.displot

  • 如果您愿意使用 seaborn,请将您的原始 df(未转置)与 sns.displotkind='hist' 一起使用:

    sns.histplot(
        data=df, x='Var6',
        col='Var2', col_wrap=2,
        height=3, aspect=1,
        kind='hist')
    

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2020-01-30
    • 2019-08-19
    • 2020-05-29
    相关资源
    最近更新 更多