1

我的数据如下所示:

 Name     Odds_Ratio_(log2)     p-value

 Ann          -1.80494           0.05
 Lucy          2.51017           0.1  
 Sally        -1.97779           0.01  
 ...

我想制作类似于图 B 或 C的图表。
在 y 轴上有 p 值,在 x 轴上有优势比(除以这样的垂直线)和绘制符号旁边的名称。我没有小数大小,因此无法在此处更改符号大小。
我该怎么做?
我真的希望有人能帮助我,因为我的 R 绘图知识让我只能像这样制作绘图:

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

图 B/C.

4

1 回答 1

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)

在此处输入图像描述


更新:

我已经添加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)

最终结果将如下所示:

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)

在此处输入图像描述

于 2013-06-16T15:14:46.973 回答