R - 如何绘制这样的ggplot2

PoG*_*bas 1 r ggplot2

我的数据看起来像这样:

 Name     Odds_Ratio_(log2)     p-value

 Ann          -1.80494           0.05
 Lucy          2.51017           0.1  
 Sally        -1.97779           0.01  
 ...
Run Code Online (Sandbox Code Playgroud)

并且我想制作看起来像图B或C的图.
要在y轴上具有p值,在x轴上具有优势比(除以这样的垂直线)并且在绘制的符号旁边具有名称.我没有分数大小所以这里不可能改变符号大小.
我该怎么做?
我真的希望有人会帮助我,因为我的R绘图知识让我只能像这样制作情节:

plot(data$V2,data$V3, main="Ratio", xlab="p-value",ylab="Odds ratio (Log2)") 
Run Code Online (Sandbox Code Playgroud)

图B/C..

jba*_*ums 6

你应该是指?plot,?abline?text.也就是说,这是基本功能的一种方法.

d <- data.frame(Name=LETTERS, Odds_Ratio_log2=runif(26, -8, 8), 
                p_value=runif(26))
plot(d$Odds_Ratio_log2, d$p_value, pch=20, xlim=c(-8, 8), ylim=c(0, 1),
     axes=F, xlab='', ylab='', yaxs='i')
abline(v=0, lwd=3)
axis(3, lwd=3, at=seq(-8, 8, 1), cex.axis=0.8, lwd.ticks=1)
mtext('Odds (Log2)', 3, line=2.5)
text(d$Odds_Ratio_log2, d$p_value, d$Name, pos=4, cex=0.7)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


更新:

我已经添加yaxs='i'plot上面的调用中,因为除非我们这样做,否则顶轴的截距略高于y = 1,可能会给人一种较低p值的印象.

需要注意的是情节不是"旋转",本身.相反,我们使用轴来抑制轴1和2(默认的x和y轴),axes=F而是绘制轴3(顶部轴;参见?axis).然后我们使用mtext绘制轴3的标签.要在绘图的左边缘绘制标签,您可以在ylab函数中使用参数(我已设置等于'')plot,或使用mtext('p-value', 2).

或者,如果您希望中心垂直线具有与y值对应的刻度线和标签,.然后,使用segments添加刻度标记,并text添加刻度标签,例如:

segments(-0.1, seq(0, 1, 0.1), 0, seq(0, 1, 0.1), lwd=2)
text(rep(0, 10), seq(0, 1, 0.1), seq(0, 1, 0.1), cex=0.7, pos=2)
Run Code Online (Sandbox Code Playgroud)

最终结果将如下所示:

opar <- par(no.readonly = TRUE)
d <- data.frame(Name=LETTERS, Odds_Ratio_log2=runif(26, -8, 8), 
                p_value=runif(26))
plot(d$Odds_Ratio_log2, d$p_value, pch=20, xlim=c(-8, 8), ylim=c(0, 1),
     axes=F, xlab='', ylab='', yaxs='i', col='gray20')
abline(v=0, lwd=3)
axis(3, lwd=3, at=seq(-8, 8, 1), cex.axis=0.8, lwd.ticks=1)
mtext('Odds (Log2)', 3, line=2.5)
text(d$Odds_Ratio_log2, d$p_value, d$Name, pos=4, offset=0.3, cex=0.7)

par(xpd=NA)
segments(-0.1, seq(0.1, 0.9, 0.1), 0, seq(0.1, 0.9, 0.1), lwd=2)
text(rep(0, 10), seq(0.1, 0.9, 0.1), seq(0.1, 0.9, 0.1), 
     cex=0.7, pos=2, offset=0.3)
par(opar)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述