如何解决如何使用循环函数在同一个图形上创建多个 ggboxplots?
TL;DR:尝试使用循环函数在一张图中使用 ggboxplot
创建多个箱线图(附上图片)。目前为每个箱线图手动创建代码,然后使用 ggarrange()
或 par()
函数将它们一起绘制。它有效,但正在寻找一种不那么重复的方式。
我想知道是否可以使用循环函数创建多个 ggboxplot
。我在 StackOverflow 上看到了多个回复/解决方案,但没有一个能准确地捕捉到我正在寻找的解决方案(或者通常不需要使用循环函数)。
我的数据如下所示:
# A tibble: 62 x 4
offer payoff partner_transfer round_type
<dbl> <dbl> <dbl> <chr>
1 40 126 66 actual
2 100 273 273 actual
3 0 100 0 actual
4 100 6 6 actual
5 25 99 24 actual
6 80 29 9 practice
7 100 45 45 practice
8 0 100 0 practice
9 25 99 24 practice
10 100 183 183 practice
# ... with 52 more rows
我想得到的输出是这样的:
通过运行多个代码,然后使用 ggarrange()
函数将它们组合起来,我能够得到它(如下):
box_offer <- ggboxplot(data = tg_proposer_split,x = "round_type",y = "offer",fill = "round_type",palette = "ucscgb",ylab = "Offer (by A)",xlab = "Round Type",add = "jitter",shape = "round_type")
box_partner_transfer <- ggboxplot(data = tg_proposer_split,y = "partner_transfer",ylab = "Amount Transferred by Partner (Bot)",shape = "round_type")
box_payoff <- ggboxplot(data = tg_proposer_split,y = "payoff",ylab = "Payoff (for A)",shape = "round_type")
ggarrange(box_offer,box_partner_transfer,box_payoff,labels = c("A","B","C"),ncol = 2,nrow = 2)
我要解决的另一种方法是使用 par()
函数(但要绘制均值)。图片在此:
我为此使用的代码是:
par(mfrow = c(2,2))
plot_offer <- plotmeans( offer ~ round_type,data = tg_proposer_split,main="Mean Plot with 95% CI")
plot_partner_transfer <- plotmeans( partner_transfer ~ round_type,main="Mean Plot with 95% CI")
plot_payoff <- plotmeans( payoff ~ round_type,main="Mean Plot with 95% CI")
虽然使用 ggarrange()
或 par()
都能提供我想要的东西,但它有点太麻烦了,因为有时我要为其创建箱线图的列/变量超过 10 个。因此,如果有一种更短的方法来获得我想要的输出而不在我的代码中重复,我试图在这里找到一些运气。我不确定问题是否出在我组织数据集的方式导致此过程变得困难,但无论哪种方式,我都愿意接受不同的解决方案。
解决方法
您可以使用 Map
创建绘图列表并使用 ggarrange
绘制它。分别传递列名和 y 标签。
library(ggpubr)
cols <- setdiff(names(tg_proposer_split),'round_type')
y_labels <- c("Offer (by A)","Amount Transferred by Partner (Bot)","Payoff (for A)")
Map(function(x,y) {
ggboxplot(data = tg_proposer_split,x = "round_type",y = x,fill = "round_type",palette = "ucscgb",ylab = y,xlab = "Round Type",add = "jitter",shape = "round_type")
},cols,y_labels) -> list_plots
ggarrange(plotlist = list_plots,common.legend = TRUE)
数据
tg_proposer_split <- structure(list(offer = c(40L,100L,0L,25L,80L,100L),payoff = c(126L,273L,6L,99L,29L,45L,183L),partner_transfer = c(66L,24L,9L,round_type = c("actual","actual","practice","practice")),class = "data.frame",row.names = c(NA,-10L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。