【问题标题】:Python Side by side box plots after groupby in Matplotlib在 Matplotlib 中 groupby 之后的 Python 并排箱线图
【发布时间】:2021-06-26 23:32:48
【问题描述】:

需要进行分组并并排打印 2 个箱线图。在下面的示例中,我需要通过按 B 列对 A 列的值进行分组来绘制 A 列的箱线图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10,1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
for n, grp in df.groupby('B'):
   plt.boxplot(x='A',data=grp)

电流输出

期望的输出 - 类似:

【问题讨论】:

    标签: python-3.x pandas matplotlib group-by boxplot


    【解决方案1】:

    您可以在对plt.boxplot() 的调用中添加一个位置,以避免箱线图在同一位置绘制两次:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
    df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
    for n, grp in df.groupby('B'):
        plt.boxplot(x='A', data=grp, positions=[n])
    plt.xticks([1, 2], ['Label 1', 'Label 2'])
    plt.show()
    

    或者你可以使用 seaborn 让分组。您可以替换列中的数字以具有标签。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
    df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
    df['B'] = df['B'].replace({1: 'Label 1', 2: 'Label 2'})
    sns.boxplot(data=df, x='B', y='A' )
    plt.show()
    

    【讨论】:

    • 谢谢。你知道如何为两个图设置刻度标签吗?
    • 您可以使用plt.xticks([1, 2], ['Label 1', 'Label 2'])(或ax.set_xticklabels(['Label 1', 'Label 2']) 与面向对象的API)。
    猜你喜欢
    • 2021-06-26
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2017-06-19
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多