如何使用两个不同长度的数据集绘制 seaborn 箱线图?

How do I draw seaborn boxplot with two data sets of different length?

我有两个数据集,NA和HG

len(NA)=267

NA = [73,49,53...]

len(HG)=176(HG 与 NA 类似)

我想像这样将两个数据集绘制成一个图(我通过独立绘制它们得到了这个,然后通过 photoshop 修改图...我不能对另一个数据集做同样的事情,因为它们有不同的轴):

seaborn采用了numpy数组和panda dataframe形式的数据,都要求数组集合等长,我的例子不成立,因为HG有176个数据点,NA有267个.

目前,我所做的是将列表传输到 pandas 数据框,然后通过

绘制

HG = sns.boxplot(data=HG, width = 0.2)

我尝试了 HG = sns.boxplot(data=HG+NA, width = 0.2) ,但它返回了一个空白图,所以...请帮忙。

非常感谢!

下面创建了一个 DataFrame,其中缺失的 HG 值仅用 NaN 填充。箱线图忽略了这些。有很多方法可以生成具有最长列表长度的 DataFrame。下面显示的连接的替代方法是 itertools.zip_longestpd.concat,如@Kenan 所建议的。

NA = [73, 49, 53, 20, 20, 20, 20, 20, 20, 20, 20, 20]
HG = [73, 30, 60]

df = pd.Series(NA, name="NA").to_frame().join(pd.Series(HG, name="HG"))
sns.boxplot(data=df, width = 0.2) 


或者您可能对使用 Holoviews 感兴趣,它以非常简单的方式为您提供完全交互式的绘图(当在带有散景后端的 Jupyter 中使用时)。对于您的案例,如下所示:

import holoviews as hv

NA = [73, 49, 53, 20, 20, 20, 20, 20, 20, 20, 20, 20]
HG = [73, 30, 60]

hv.BoxWhisker(NA, label="NA") * hv.BoxWhisker(HG, label="HG")

我假设 NAHG 是自您绘制箱形图以来具有一列的数据框。所以你可以将它们连接成一个 df 然后绘制,大 df 会有 NaN 但 seaborn 会忽略那些

df = pd.concat([NA, HG], axis=1)
sns.plot(data=df)