【发布时间】:2018-06-27 07:25:16
【问题描述】:
我有一个包含几列的数据框,其中每列有 5 到 2535 个条目(其余为 NAN)。当列有超过 9 个数字条目时,我想绘制一个箱线图,否则绘制一个 swarmplot。我用我疯狂的绘画技巧来创建一个例子。
问题是我只能将两者都绘制为覆盖图,如this example。我尝试使用 position 关键字,但这仅适用于箱线图,不适用于 swarmplot。那么,如何做到这一点呢?
可以这样生成示例数据集:
np.random.seed(1)
df = pd.DataFrame(np.nan, index=range(100), columns=range(11))
for i, column in enumerate(df.columns):
if i % 2 == 0:
fill_till = np.random.randint(1,11)
df.loc[:fill_till-1,column] = np.random.random(fill_till)
else:
fill_till = np.random.randint(11,101)
df.loc[:fill_till-1,column] = np.random.random(fill_till)
【问题讨论】:
-
将您的数据表分成两份(一份超过 9 个条目,一份包含其余条目),然后在同一张图中绘制一个 swarmplot 和一个箱线图?
-
好主意,但列有特定的顺序,图也应该有。如果我理解正确,您的解决方案将首先绘制所有箱线图而不是所有群图(反之亦然)?
-
根据您的绘画技巧(顺便说一句,这让您获得了我的支持),您绘制的数字是自动排序的。我认为这不是现实,而是分类图。但是您可以使用
plt.plot(column_order, np.repeat(np.nan, len(column_order)))之类的东西准备轴,以便之后将来自两个数据帧的类别填充到正确的插槽中。
标签: python matplotlib seaborn boxplot