【问题标题】:Boxplot of Multiple Columns of a Pandas Dataframe on the Same Figure (seaborn)同一图上 Pandas 数据框多列的箱线图(seaborn)
【发布时间】:2018-09-08 07:08:37
【问题描述】:

我觉得我可能没有想到一些显而易见的事情。我想在同一个图中放入数据框每一列的箱线图,在 x 轴上我有列的名称。在seaborn.boxplot() 中,每列都等于groupby

在熊猫中我会这样做

df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
df.boxplot()

产生

现在我想在 seaborn 中得到同样的东西。但是当我尝试sns.boxplot(df) 时,我只得到一个分组箱线图。如何在 seaborn 中重现相同的图形?

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    海洋生物的等价物

    df.boxplot()
    

    sns.boxplot(x="variable", y="value", data=pd.melt(df))
    

    或者只是

    sns.boxplot(data=df)
    

    它将绘制任何一列数值,而不会将 DataFrame 从宽格式转换为长格式,使用 seaborn v0.11.1。这将创建一个图形,每列都有一个单独的箱线图。

    带有melt的完整示例:

    import numpy as np; np.random.seed(42)
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
    
    sns.boxplot(x="variable", y="value", data=pd.melt(df))
    
    plt.show()
    

    这是因为pd.melt 转换了宽格式数据帧

              A         B         C         D
    0  0.374540  0.950714  0.731994  0.598658
    1  0.156019  0.155995  0.058084  0.866176
    2  0.601115  0.708073  0.020584  0.969910
    3  0.832443  0.212339  0.181825  0.183405
    

    长格式

       variable     value
    0         A  0.374540
    1         A  0.156019
    2         A  0.601115
    3         A  0.832443
    4         B  0.950714
    5         B  0.155995
    6         B  0.708073
    7         B  0.212339
    8         C  0.731994
    9         C  0.058084
    10        C  0.020584
    11        C  0.181825
    12        D  0.598658
    13        D  0.866176
    14        D  0.969910
    15        D  0.183405
    

    【讨论】:

      【解决方案2】:

      您可以按照this question 中的建议使用内置的pandas 方法df.plot(kind='box')
      我知道如果您必须使用 seaborn,这个答案对您没有帮助,但它可能对要求更简单的人有用。

      import numpy as np; np.random.seed(42)
      import pandas as pd
      import matplotlib.pyplot as plt
      
      df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
      
      df.plot(kind='box')
      plt.show()
      

      【讨论】:

        【解决方案3】:
        plt.boxplot([df1,df2],   boxprops=dict(color='red'), labels=['title 1','title 2'])
        

        【讨论】:

          猜你喜欢
          • 2018-02-16
          • 1970-01-01
          • 2023-02-24
          • 2020-08-03
          • 2015-12-20
          • 2020-09-20
          • 2016-06-11
          • 2021-04-18
          • 1970-01-01
          相关资源
          最近更新 更多