【问题标题】:How to construct a nested box plot in Seaborn from three dataframes如何从三个数据帧在 Seaborn 中构建嵌套箱线图
【发布时间】:2020-05-30 06:20:04
【问题描述】:

我有三个数据集,现在我正在制作 3 个不同的箱形图。现在我正在使用:

chart1 = sns.catplot(x="Provider", y="Appearances", kind="box", data=mlt_sample1k)
chart2 = sns.catplot(x="Provider", y="Appearances", kind="box", data=mlt_sample10k)
chart3 = sns.catplot(x="Provider", y="Appearances", kind="box", data=mlt_sample100k)

mlt_sample1kmlt_sample10kmlt_sample100k 是我的三个数据框。

我想将这些组合成一个箱线图,每个提供者有 3 个平行箱,如示例from the docs. 类似:

但是有 3 个盒子,星期四、星期五等将是我的“提供者”类别。我在他们简单使用的文档中看到:

ax = sns.boxplot(x="day", y="total_bill", hue="smoker",

                 data=tips, palette="Set3")

但这对我不起作用,因为我必须指定三个数据集,每个框一个。我怎样才能做到这一点?

编辑:我的数据框的结构始终相同:

item  |  provider  | appearances

'dog'    'prov1'      0.001
'cat'    'prov2'      0.02
'pig'    'prov1'      0.03
...

箱线图代表项目的统计数据,根据外观列,每个提供者(总共 6 个)每个数据帧。

三个数据帧的长度不同。

【问题讨论】:

  • 有关 dfs 结构的更多信息会很有用。您是否尝试过创建一个轴对象并将其传递给每个单独的箱线图调用?
  • @FChm 我已经用数据框结构编辑了我的答案。至于你的建议,我不确定你的意思。你能尝试粘贴一个小代码示例吗?

标签: python matplotlib plot seaborn


【解决方案1】:

IIUC,你可以concat 三个数据框和assign 一个列用作色调:

sns.catplot(x="Provider", y="Appearances", 
            kind="box", hue='h',
            data=pd.concat([mlt_sample1k.assign(h='1k'), 
                            mlt_sample10k.assign(h='10k'), 
                            mlt_sample100k.assign(h='100k')])
           )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2019-02-27
    • 2021-04-18
    • 2017-11-17
    相关资源
    最近更新 更多