在ggplot2条形图中显示显著性关系

4
尽管至少有一个先前的帖子中已经回答了我提出的基本问题,但那里描述的方法对我没有起作用,这里讨论的解决方案也是如此。
为了参考,我正在尝试使用R中的ggplot2重新创建此处链接的图形。
这是我使用的数据框的简化版本:
 df <-data.frame(
  Related = c("Rel","Rel","Unrel","Unrel"),
  Integrated = c("Integ", "Unint", "Integ", "Unint"),
  Rate = c(11,8,6,4),
  SE = c(1.5,1.4,1.3,1.2))

就条形图、SE误差线、坐标轴和一般格式而言,我已经通过以下方法基本上实现了所需的内容(请注意,我是单独处理x轴标签和报告的p值):

dodge <- position_dodge(width = 0.9)
g1    <- ggplot(data = df, aes(x = interaction(Integrated, Related), y     = Rate, fill = interaction(Integrated, Related))) 
g1    <- g1 + layer(geom="bar", stat="identity", position = position_dodge())
g1    <- g1 + scale_fill_manual(values=c("#990000", "#CC6666", "#000099", "#9999CC"))
g1    <- g1 + guides(fill=FALSE)
g1    <- g1 + geom_errorbar(aes(ymax = Rate + SE, ymin = Rate - SE), position = dodge, width = 0.2) 
g1    <- g1 + coord_cartesian(ylim = c(0, 15))
g1    <- g1 + scale_y_continuous(breaks=seq(0, 14, 2))
g1    <- g1 + theme_classic()
g1    <- g1 + theme(text = element_text(size=20))
g1    <- g1 + ylab("Mismatch effect (%)")
g1    <- g1 + theme(axis.title.y=element_text(vjust=1.5))
g1    <- g1 + theme(plot.margin = unit(c(1, 1, 4, 1), "lines"),
                axis.title.x = element_blank(),
                axis.text.x = element_blank())

当我尝试添加图中顶部显示的显著性比较/关系条时,出现了问题。当我尝试只添加星号和顶部条(不包括第二层分支)使用以下代码时,它返回下面列出的错误并仅在适当位置显示星号。 代码:
 g1 + geom_path(x=c(1.5,1.5,3.5,3.5),y=c(13,14,14,13))+  annotate("text",x=2.5,y=15,label="*")

错误:

geom_path: 每个组只包含一个观测值。你需要调整组的美学吗?

在研究可能的问题来源后(例如上面链接的帖子),我尝试创建一个单独的 df 并明确地引用它,如下所示:

代码:

data2 <- data.frame(x = c(1.5, 1.5, 3.5, 3.5), y = c(13, 14, 14, 13))
g1 + geom_path(data = data2, aes(x = x, y = y))

但是,我又收到了一个错误:

错误信息:

交互(综合、相关)出错:找不到对象“Integrated”

我已经花费了很多时间尝试解决这个问题,但没有成功。我希望能够重新创建上面链接的图片。非常感谢任何帮助。

1个回答

2

geom_path 需要一个分组变量。由于没有分组,你需要添加 aes(group=1)

g1 + geom_path(aes(group=1), x=c(1.5,1.5,3.5,3.5), y=c(13,14,14,13)) +  
  annotate("text", x=2.5,y=14.4,label="*", size=8)

第二个错误,object 'Integrated' not found,是因为您的第二个数据集需要具有与原始数据集相同的美学和分面变量,即使您在该图层中没有明确使用它们。例如,这将起作用:
data2 <- data.frame(x = c(1.5, 1.5, 3.5, 3.5), y = c(13, 14, 14, 13),
                    Integrated=NA, Related=NA)
g1 + geom_path(data = data2, aes(x = x, y = y))

一些其他的评论,希望对您有用:
1)每次添加新语句时不需要保存g1。您可以使用单个命令将它们全部串在一起,每个语句后面加上“+”。
g1 <- ggplot(data = mis.eff, aes(x = interaction(Integrated, Related), 
             y = Rate, fill = interaction(Integrated, Related))) + 
       layer(geom="bar", stat="identity", position = position_dodge()) +
       scale_fill_manual(values=c("#990000", "#CC6666", "#000099", "#9999CC")) +
       ... etc.

2) 在您的注释中,您设置了y=15,这超出了绘图的y范围,因此它不会显示。我已将值更改为14.4。如果您想更改它们,您也可以手动设置y限制。

3) 我已经增加了星号的大小,使其更加突出。当然,您可以根据需要进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接