我的数据看起来像这样:
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)
.
你应该是指?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)

| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |