【问题标题】:Seaborn multiple grouped boxplot based on column namesSeaborn 基于列名的多组箱线图
【发布时间】:2021-09-02 18:21:16
【问题描述】:

假设我有以下数据框

df = pd.DataFrame(
[
['x', 42, 50 68 12,
['y', 51, 60 79 22,
['z', 43, 50 58 12,
['w', 46, 70 88 22,
['xy',38, 40 69 22,
['xz',39, 40 49 12
], columns=['system', 'b', 'c', 'd', 'e'])

我想根据列名创建一个多组箱线图(我想创建列 b、c、d、e 和的箱线图)。有没有办法完成这个任务?我找不到有关此的任何信息

例如,我查看了 seaborn 网站,它根据列值 here (hue="smoker") 创建了分组箱线图

【问题讨论】:

    标签: pandas seaborn boxplot


    【解决方案1】:

    您需要先melt您的数据框,以将其数据结构更改为适用于 seaborn 的结构:

    注意:BELOW CODE 不会返回样本数据框。但是,它应该适用于实际数据。使用提供的示例数据,如果您传递 hue 参数,您将不会得到一个框,因为您的 system 列中值的最大大小为 1。您不能有一个只有一个值的箱线图,这将破坏箱线图的目的。相反,您可能需要条形图或折线图。 换句话说,x、y、z、w、xy、xz 等只有一行。在实际数据中,假设有 600 行系统中的每个值都有 100 行,那么您将得到一个包含以下代码的分组框。

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame([
    ['x', 42, 50, 68, 12],
    ['y', 51, 60, 79, 22],
    ['z', 43, 50, 58, 12],
    ['w', 46, 70, 88, 22],
    ['xy',38, 40, 69, 22],
    ['xz',39, 40, 49, 12]], columns=['system', 'b', 'c', 'd', 'e'])
    
    df = df.melt(id_vars='system')
    
    sns.boxplot(x="system", y="value", hue="variable", data=df)
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 2021-11-27
      • 2021-03-08
      • 2019-04-29
      • 2021-09-08
      • 2020-08-03
      • 2018-02-16
      • 2022-01-14
      • 2017-05-14
      相关资源
      最近更新 更多