在ggplot2条形图中显示重要性关系

虽然我要问的基本问题已经在至少一个
previous post中得到解决,但是那里描述的方法对我没有用,也没有提出的解决方案,在
here中讨论过.

作为参考,我试图在R中使用ggplot2重新创建图linked here.

这是我正在使用的数据框的简化版本:

 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: Each group consist of only one observation. Do you need to adjust the group aesthetic?

在研究了问题的潜在来源(例如上面链接的帖子)之后,我尝试创建一个单独的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))

但同样,我收到一个错误:

错误:

Error in interaction(Integrated, Related) : object ‘Integrated’ not found

我花了很多时间试图解决这个问题,但无济于事.我希望能够重新创建上面的图像.我非常感谢任何帮助.

最佳答案 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)

第二个错误,未找到对象’Integrated’,是因为您的第二个数据集需要具有与原始数据集相同的美学和构面变量,即使您没有明确地将它们用于该图层.例如,这将起作用:

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)我增加了星号的大小,因此它更加突出.您当然可以根据需要进行调整.

点赞