还在为棒棒图发愁吗?来跟小果去学习如何绘制棒棒糖!
小伙伴平时见过不少图,棒棒图肯定也见过,但是有时候不知道这个图用来干什么的,其实棒棒图用在基因组绘图中是比较多的,例如下面这个图是The whole-genome landscape of medulloblastoma subtypes文献中的棒棒图,这个是用来展示基因组的情况,其实这个图已经数据高级绘图。当然,棒棒图还可以用在其他用途,我们在做肿瘤分析的时候,甲基化方面用的不少,还有景观突变分析等等。
小伙伴还是不明白用途的话,小果这里简单介绍几个用途
例如染色体结构和组织:棒棒糖图用于呈现染色体的结构、大小和形状。通过将染色体上的不同区域分区、标记和上色,可以更清晰地了解染色体的组织和结构。
基因定位和标记:棒棒糖图可以标记和显示特定基因、基因组区域或标记点的位置。这有助于找到特定的基因,从而进行遗传研究、疾病关联性分析等。
染色体异常的检测和诊断:棒棒糖图可用于检测染色体异常,如染色体缺失、重复、倒位等。可以使用这些图来诊断染色体异常相关的疾病。
等等,小伙伴是不是已经等不及了,下面跟着小果去学习一下吧,
我们这里使用R语言老朋友刚刚ggplot来绘制
library(tidyverse) #数据处理以及绘图使用,tidyverse是很多包的集合
# 数据产生,这里我们使用随机的数据演示
data <- data.frame(x=LETTERS[1:26], y=abs(rnorm(26)))
# 基础绘图
ggplot(data, aes(x=x, y=y)) +
geom_segment( aes(x=x, xend=x, y=0, yend=y)) +
geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
参数中geom_point()绘制棒棒糖图的圆,用geom_segment()绘制线段。
我们来看下代码:geom_segment(aes(x=x, xend=x, y=0, yend=y)): 这一行添加了线段层,用于绘制柱状部分的“棒棒”。aes(x=x, xend=x, y=0, yend=y)定义了线段的起点和终点。 geom_point(size=5, color=”red”, fill=alpha(“orange”, 0.3), alpha=0.7, shape=21, stroke=2): 这一行添加了点层,用于绘制柱状顶部的“棒棒头”。
我们还可以调整整张图的主题,这里也是用ggplot2中的参数
data <- data.frame(x=LETTERS[1:26],y=abs(rnorm(26)))
ggplot(data, aes(x=x, y=y)) +
geom_segment( aes(x=x, xend=x, y=0, yend=y), color="grey") +
geom_point( color="orange", size=4) +
theme_light() +
theme(
panel.grid.major.x = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank()
) +
xlab("") +
ylab("Value of Y")
当然,棒棒图还可以是横向的,来看一下
这里加一个coord_flip()就可以了
#横向
ggplot(data, aes(x=x, y=y)) +
geom_segment( aes(x=x, xend=x, y=0, yend=y), color="skyblue") +
geom_point( color="blue", size=4, alpha=0.6) +
theme_light() +
coord_flip() +
theme(panel.grid.major.y = element_blank(),
panel.border = element_blank(),
axis.ticks.y = element_blank())
图中的线条其实小伙伴不喜欢的话,我们也可以换点,只要调整geom_segment()中的y值就可以
#图的基线
data <- data.frame(x=LETTERS[1:26],y=abs(rnorm(26)))
ggplot(data, aes(x=x, y=y)) +
geom_segment( aes(x=x, xend=x, y=1, yend=y), color="grey") +
geom_point( color="red", size=4) +
theme_light() +
coord_flip()+
theme(panel.grid.major.x = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank()) +
xlab("") +
ylab("Value of Y")
是不是变得不一样了
如果觉得单调,我们还可以在棒棒图中突出一些小伙伴想要注释的组或者其他注释
#注释
data <- data.frame(x=LETTERS[1:26], y=abs(rnorm(26)))
data <- data %>% arrange(y) %>% mutate(x=factor(x,x))
library(ggplot2)
library(hrbrthemes)#这里小伙伴注意下,theme_ipsum()要用到这个包,运行失败的话,记得加载一下这个包
ggplot(data, aes(x=x, y=y)) +
geom_segment(aes(x=x, xend=x, y=1, yend=y), color=ifelse(data$x %in% c("A","D"), "orange", "grey"), size=ifelse(data$x %in% c("A","D"), 1.3, 0.7)) +
geom_point(color=ifelse(data$x %in% c("A","D"), "orange", "grey"), size=ifelse(data$x %in% c("A","D"), 5, 2)) +
theme_ipsum() +
coord_flip() +
theme(legend.position="none") +
xlab("") +
ylab("Value of Y") +
ggtitle("How did groups A and D perform?")+
annotate("text", x=grep("D", data$x), y=data$y[which(data$x=="D")]*4,
label="Group D is very impressive",
color="orange", size=4 , angle=0, fontface="bold", hjust=0) +
annotate("text", x = grep("A", data$x), y = data$y[which(data$x=="A")]*2.5,
label = paste("Group A is not too badn (val=",data$y[which(data$x=="A")]*1.2 %>% round(2),")",sep="" ) ,
color="orange", size=4 , angle=0, fontface="bold", hjust=0)
这样一来就大功告成了,这里小果是演示的数据,小伙伴要自己设置数据,记得多多理解代码的意义,这样才能绘制出自己想要的图,最后呢,棒棒图也可以展示流程或者组织结构图中一些特殊的点,小伙伴快去试试吧!
小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!
定制生信分析
服务器租赁
扫码咨询小果
往期回顾
01 |
02 |
03 |
04 |