【问题标题】:ggplot2: how to add significance bar to density plot?ggplot2:如何在密度图中添加显着性条?
【发布时间】:2017-05-03 08:30:22
【问题描述】:

我正在尝试使用显着性检验生成(分组)密度图 我用箱线图(ggsignif 包)做到了,但我不知道如何在密度图中做

setwd("~/myData")

data<-read.delim("genes.txt", head=T, row.names = 1)
data$Variance<-apply(data, 1, var)

head(data)
dim(data)

library(ggplot2)

library(ggsignif)

ggplot(data, aes(x=variance, col=type)) +geom_density() )
 geom_signif(comparisons = list(c("normal", "traited")),map_signif_level=TRUE)

我有这个错误:

error in f(...)
can oly handle data with groupes that are plotted on the x-axis 

【问题讨论】:

  • 欢迎来到 SO。请分享一些数据和代码以使您的问题可重现:stackoverflow.com/questions/5963269/…
  • 哦,我刚刚看到你扩展了这个问题 - 我的答案现在有点偏离,因为我没有意识到你想使用 ggsignif - 顺便说一句,很高兴了解!
  • 然而,ggsignif 的错误栏和小插图似乎表明它还不适用于非条形图。所以你可能对我的解决方案感兴趣。

标签: r ggplot2


【解决方案1】:

正如 cmets 中所写,我猜ggsignif 中尚未实现 bar 类型。在这里,手动解决方法,包括一些手动预处理(均值、pvalue)和后处理(通过调整垂直定位使其看起来不错)。

x = rnorm(10000,2)
y = rnorm(10000,-1)

require(ggplot2)

df1=data.frame(val=x,type="x")
df2=data.frame(val=y,type="y")
df.complete = rbind(df1,df2)

mean1 = mean(x)
mean2 = mean(y)
middle = (mean1 + mean2)/2

pval = 0.001 #replace by appropriate p-value from test of choice

g = ggplot(df.complete,aes(x=val,fill=type))
g = g + geom_density()
g = g + ylim(0,0.5) #enlarge sufficiently to have some space
g = g + geom_segment(aes(x=mean1,y=0.425,xend=mean1,yend=0.45)) #correct y and yend after visual inspection
g = g + geom_segment(aes(x=mean2,y=0.425,xend=mean2,yend=0.45)) #correct y and yend after visual inspection
g = g + geom_segment(aes(x=mean2,y=0.45,xend=mean1,yend=0.45))  #correct y and yend after visual inspection
g = g + geom_text(aes(x=middle,y=0.47,label=pval),hjust="center") #correct y after visual inspection
g

http://www.r-fiddle.org/#/fiddle?id=NUxpKHlv&version=2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2021-04-09
    相关资源
    最近更新 更多