【R语言】R绘图散点图添加文本注释

这里以火山图为例进行说明,在转录组分析中,火山图是很常见的一类图,纵轴表示p_value,横轴表示log (fold change)。单一的散点图绘制很简单,火山图比较难处理的地方就是一些基因的注释,基因越多,加文本注释越困难,因为文字会堆在一起,看不清。

示例数据df1是转录组做差异表达后的部分结果,df2将logFC绝对值大于0.3的挑出来了。

> head(df1)

p_val avg_logFC class gene cd avg_logFC_new2 p_val_new

1 1.628043e-43 0.4804759 P2L PI3 P2L_0.3 -0.4804759 42.78833

2 1.131599e-88 0.4565683 P2L ZG16 P2L_0.3 -0.4565683 87.94631

3 7.342746e-58 0.4192149 P2L XIST P2L_0.3 -0.4192149 57.13414

4 1.728085e-28 0.4113532 P2L FN1 P2L_0.3 -0.4113532 27.76243

5 1.288611e-33 0.4100842 P2L PIGR P2L_0.3 -0.4100842 32.88988

6 6.647279e-14 0.4035325 P2L HSPA1A P2L_0.3 -0.4035325 13.17736

df2=df1%>%filter(abs(avg_logFC_new2) > 0.3)

先看一下,没加文本的图

p <- ggplot(data = df1,aes(x = avg_logFC_new2, y = p_val_new)) +

geom_point(aes(colour = cd,size = abs(avg_logFC_new2)),alpha=0.9) +

scale_color_manual(values=c("P2L_0.3" = "#80B1D3","else" = "grey","L2P_0.3" = "#FB8072"))+

scale_x_continuous("avg_logFC",limits = c(-0.6,0.6),breaks = seq(-0.6,0.6,0.3),labels = seq(-0.6,0.6,0.3)) +

scale_y_continuous("-log10 (p-value)")+

geom_vline(xintercept=c(-0.3,0.3),lty=2,col="black",lwd=1) +

theme_bw()+

theme(

legend.background=element_blank(), legend.key=element_blank(),

legend.title = element_blank(),

panel.grid.major = element_blank(),panel.grid.minor = element_blank()

)

p

ggsave("tmp0.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

接下来用ggplot2里面的geom_text添加文本,另建一个图层,在新图层中指定data和mapping,需要注意的是,新图层里面没有指定x和y,则会延用之前图层的x和y,也就是前面的x = avg_logFC_new2, y = p_val_new

p+geom_text(data=df2,mapping = aes(label=gene))

ggsave("tmp1.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

这张图存在两个问题:文字直接盖在点上,遮住了点;文字相互重叠。

再看一下ggplot2的另一个函数geom_label

p+geom_label(aes(label=gene),df2,alpha=0,nudge_y = 3)

#alpha=0让文本框的背景透明,让点显露出来;nudge_y把注释框上移

ggsave("tmp2.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

可以看到,文本框还是重叠...

这里介绍一下我用的另一个R包ggrepel,它就是解决这个问题的

p+ggrepel::geom_text_repel(

aes(label=gene),df2

)

ggsave("tmp3.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

这个图里面重叠问题已经解决了,文本靠在点的旁边,且文本不重叠,太密集的区域有线段指向。不过大部分没有线段指向,如果点与点,文本与文本比较近,还是无法肉眼区分,最好再多加一些线段来指向。可以调整一下几个padding参数,如下:

p+ggrepel::geom_text_repel(

aes(label=gene,color=cd),df2,

size = 4, #注释文本的字体大小

box.padding = 0.5, #字到点的距离

point.padding = 0.8, #字到点的距离,点周围的空白宽度

min.segment.length = 0.5, #短线段可以省略

segment.color = "black", #segment.colour = NA, 不显示线段

show.legend = F)

ggsave("tmp4.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

到这儿,文本注释算加完了,线段的方向还不是很满意,有些杂乱文章。

这个包里面的另一个函数geom_label_repel,可以加文本框,参数和geom_text_repel类似,

p+ggrepel::geom_label_repel(

aes(label=gene),df2

)

ggsave("tmp5.pdf",width = 22, height = 20, units = c("cm"))

R绘图(3): 散点图添加文本注释

需要注意的是,文本框会遮住点,调节alpha参数的话,会同时改变文本框背景和文字的透明度,这个和ggplot2里面geom_label的alpha参数不太一样。

因水平有限,有错误的地方,欢迎批评指正!

以上是 【R语言】R绘图散点图添加文本注释 的全部内容, 来源链接: utcz.com/a/119813.html

回到顶部