python – 根据数据点的数量在同一个ax中绘制swarmplot或boxplot
发布时间:2020-12-20 11:05:51 所属栏目:Python 来源:网络整理
导读:我有一个包含多个列的数据框,其中每列有5到2535个条目(其余为NAN).当列有超过9个数字条目时,我想绘制一个boxplot,否则就是swarmplot.我用疯狂的绘画技巧创造了一个例子. 问题是我只能将两者都绘制为叠加,如this example所示.我尝试使用position关键字,但这仅
我有一个包含多个列的数据框,其中每列有5到2535个条目(其余为NAN).当列有超过9个数字条目时,我想绘制一个boxplot,否则就是swarmplot.我用疯狂的绘画技巧创造了一个例子.
问题是我只能将两者都绘制为叠加,如this example所示.我尝试使用position关键字,但这仅适用于boxplot,而不适用于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) 解决方法
您可以创建数据框的两个副本,一个用于框图,另一个用于swarm图.然后,在每个副本中,将您不想以这种方式绘制的列中的值设置为nan.
col_mask = df.count() > 9 swarm_data = df.copy() swarm_data.loc[:,col_mask] = np.nan box_data = df.copy() box_data.loc[:,~col_mask] = np.nan 然后将每个复制的数据帧传递给适当的seaborn函数. sns.swarmplot(data=swarm_data) sns.boxplot(data=box_data) plt.show() 在创建swarm plot时,seaborn将为填充nan的列填充任何内容,但会留下空间.方框图会发生相反的情况,从而导致您的列顺序被保留. 上面代码生成的图表如下所示: 此方法也适用于具有非数字标签的列: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |