R - 如何绘制这样的ggplot2

时间:2013-06-16 14:26:13

标签: r ggplot2

我的数据如下:

 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)") 

Figure B/C

1 个答案:

答案 0 :(得分: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)

enter image description here


更新:

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

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

或者,如果您希望中心垂直线具有与y值对应的刻度线和标签,。然后,使用mtext('p-value', 2)添加刻度标记,使用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)

enter image description here