gpt4 book ai didi

r - 在多面图中用 N 注释 x 轴

转载 作者:行者123 更新时间:2023-12-03 00:02:41 31 4
gpt4 key购买 nike

我正在尝试生成一些按治疗条件和访问次数分割的数字结果的箱线图,每个框中的观察次数都放在图下方,并且也标记了访问次数。这里有一些虚假数据可以用来说明,我举了两个我尝试过但不太有效的例子。

library(ggplot2)
library(plyr)

trt <- factor(rep(LETTERS[1:2],150),ordered=TRUE)
vis <- factor(c(rep(1,150),rep(2,100),rep(3,50)),ordered=TRUE)
val <- rnorm(300)
data <- data.frame(trt,vis,val)
data.sum <- ddply(data, .(vis, trt), summarise,
N=length(na.omit(val)))
mytheme <- theme_bw() + theme(panel.margin = unit(0, "lines"), strip.background = element_blank())

下面的代码生成一个图,其中有我想要的 N 个标签。它通过从我创建的辅助数据集中获取摘要数据来实现此目的。但是,我不知道如何在 x 轴上标记访问(理想情况下在各个框标签下方),或以其他方式直观地描述访问(例如,将它们分隔成面板的线)。

plot1    <- ggplot(data) + 
geom_boxplot(aes(x=vis:trt,y=val,group=vis:trt,colour=trt), show.legend=FALSE) +
scale_x_discrete(labels=paste(data.sum$trt,data.sum$N,sep="\n")) +
labs(x="Visit") + mytheme

下面的图比上面的更接近我想要的,因为它有一个很好的治疗和访问层次结构,以及描述访问的漂亮格式。然而,对于每个面板,它从与处理条件匹配的摘要数据的第一行获取 N,因为它不“知道”每个方面需要使用与该访问相对应的行。

plot2    <- ggplot(data) +     geom_boxplot(aes(x=trt,y=val,group=trt,colour=trt), show.legend=FALSE) +
facet_wrap(~ vis, drop=FALSE, switch="x", nrow=1) +
scale_x_discrete(labels=paste(data.sum$trt,data.sum$N,sep="\n")) +
labs(x="Visit") + mytheme

最佳答案

一种解决方法是操作数据集,使 x 变量成为 trtN 之间的交互作用。

利用已有的数据,您可以通过合并N添加到原始数据集。

test = merge(data, data.sum)

然后创建一个由 trtN 组合而成的新变量。

test = transform(test, trt2 = paste(trt, N, sep = "\n"))

现在绘制图表,在 x 轴上使用新的 trt2 变量,并在 facet_wrap 中使用 scales = "free_x" 以允许每个方面都有不同的标签。

ggplot(test) +     
geom_boxplot(aes(x = trt2, y = val, group = trt, colour = trt), show.legend = FALSE) +
facet_wrap(~ vis, drop = FALSE, switch="x", nrow = 1, scales = "free_x") +
labs(x="Visit") +
mytheme

enter image description here

关于r - 在多面图中用 N 注释 x 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006840/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com