还在为棒棒图发愁吗?来跟小果去学习如何绘制棒棒糖!






还在为棒棒图发愁吗?来跟小果去学习如何绘制棒棒糖!

小图  生信果  2024-03-25 19:00:20

小伙伴平时见过不少图,棒棒图肯定也见过,但是有时候不知道这个图用来干什么的,其实棒棒图用在基因组绘图中是比较多的,例如下面这个图是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

1024G存储的生信服务器,两人成团,1人免单!

02

单个数据库用腻了?多数据库“组合拳”带你打开免疫浸润新思路!

03

孟德尔随机化的准备工作,GWAS数据的网站下载方法

04

跟着小果学复现-手把手带你拿下IF=46.9Nature 级别的主成分分析(PCA)图!!