python – 根据数据点的数量在同一个ax中绘制swarmplot或boxplot

python – 根据数据点的数量在同一个ax中绘制swarmplot或boxplot,第1张

概述我有一个包含多个列的数据框,其中每列有5到2535个条目(其余为NAN).当列有超过9个数字条目时,我想绘制一个boxplot,否则就是swarmplot.我用疯狂的绘画技巧创造了一个例子. 问题是我只能将两者都绘制为叠加,如this example所示.我尝试使用position关键字,但这仅适用于boxplot,而不适用于swarmplot.那么,怎么做呢? 可以像这样生成示例数据集: np. 我有一个包含多个列的数据框,其中每列有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() > 9swarm_data = df.copy()swarm_data.loc[:,col_mask] = np.nanBox_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的列填充任何内容,但会留下空间.方框图会发生相反的情况,从而导致您的列顺序被保留.

上面代码生成的图表如下所示:

此方法也适用于具有非数字标签的列:

总结

以上是内存溢出为你收集整理的python – 根据数据点数量在同一个ax中绘制swarmplot或boxplot全部内容,希望文章能够帮你解决python – 根据数据点的数量在同一个ax中绘制swarmplot或boxplot所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1192094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存