其他
跟着 Science 学画图:多层柱形图
点击上方关注“公众号”
1、发生
昨晚躺床上看到小明哥的推文:跟着 Science 学画图:R 语言 ggplot2 实现图中嵌图,跟着小明哥的代码即可复现出 Science 文章里的这篇图:
下面是明哥最终复现的图,可以看到基本上非常相似了,很棒:
然后明哥提出了如何绘制下面的 注释矩形图
这个问题,因为原文没有给代码 ,今天尝试了一下,是可以完成的。
2、绘图
我们先进行绘制堆积柱形图:
# 设置工作目录
setwd('c:/Users/admin/Desktop/')
# 加载包
library(dplyr)
library(ggplot2)
library(ggnewscale)
library(ggsci)
# 读取数据
df <- read.delim("pan_matrix_stats.csv",row.names = 1,sep = ",")
# 查看内容
head(df,3)
class Subgenome number_genome_presence n
1 Private Gene Non-Syntenic 1 19576
2 Core Gene Non-Syntenic 26 10618
3 Dispensable Gene Non-Syntenic 2 10436
绘制堆积图:
# 绘制柱形堆积图
p <- ggplot(df,aes(x = number_genome_presence)) +
geom_bar(aes(fill = Subgenome,y = n),
position = "stack",
# 柱子宽度
width = 0.9,
stat = "identity") +
# 控制颜色过渡,图例名称
scale_fill_grey(start = 0.7,end = 0.2,name = 'Maize Subgenomes') +
labs(x = 'Number of Genomes',y = 'Number of Pan-Genes') +
# 经典主题
theme_classic(base_size = 16) +
# 图例位置
theme(legend.position = 'top') +
# y轴范围
scale_y_continuous(limits = c(-1500,30000)) +
# x轴显示刻度
scale_x_continuous(breaks = seq(1:26))
p
然后添加标签:
# 添加标签
# 构造标签数据
df %>% group_by(number_genome_presence) %>%
summarise(sum = sum(n)) %>% as.data.frame() -> text_data
# 查看内容
head(text_data,3)
number_genome_presence sum
1 1 19888
2 2 10614
3 3 6442
# 添加
p1 <- p + geom_text(data = text_data,
aes(x = number_genome_presence,y = sum + 100,label = sum),
# 标签角度及对齐
angle = 90,hjust = 0,vjust = 0.5,
size = 3)
p1
接下来我们在柱形图下方添加 矩形注释
,三种颜色 的注释。前面我们设置了每根 柱子的宽度是 0.9
,而横坐标每个刻度对准了柱子的中间,所以可以计算出每根柱子的 起始位置 和 终止位置,这样就可以添加多个矩形注释了,下面是示意图:
# 构建矩形注释数据
anno <- data.frame(number_genome_presence = 1:26,type = c(1,rep(2,22),rep(3,2),4))
anno$xmin <- anno$number_genome_presence - 0.45
anno$xmax <- anno$number_genome_presence + 0.45
# 查看数据
head(anno,3)
number_genome_presence type xmin xmax
1 1 1 0.55 1.45
2 2 2 1.55 2.45
3 3 2 2.55 3.45
# 添加注释
p2 <- p1 + new_scale('fill') +
geom_rect(data = anno,
aes(fill = factor(type),
xmin = xmin,
xmax = xmax,
ymin = -1500,ymax = -200),
show.legend = F) +
# 修改颜色
scale_fill_manual(values = c('#1EAE98','#00C1D4','#001E6C','#FF3F00'))
p2
接下来绘制饼图:
# 构造饼图数据
pie <- data.frame(name = c("Core Gene", "Dispensable Gene","Private Gene","Near-Core Gene"),
per = c(27.09,49.59,19.30,4.02))
# 按图中顺序排列
pie$name <- factor(pie$name,levels = pie$name)
# 绘制饼图
pie_plot <- ggplot(pie,aes(x = '',y = per,fill = name)) +
geom_bar(stat = 'identity',width = 1,show.legend = F) +
coord_polar(theta = 'y') +
theme_void() +
scale_fill_npg()
# 将饼图添加到堆叠柱形图里
ppie <- ggplotGrob(pie_plot)
pcombing <- p2 + annotation_custom(grob = ppie,
xmin = 5,
xmax = 22,
ymin = 12000,
ymax = 28000)
pcombing
最后添加注释:
# 给饼图添加注释
pcombing +
annotate("text", x = 8, y = 22000,
label = "Core Genes: 27.09%",size = 4) +
annotate("text", x = 15, y = 28050,
label = "Near-Core Genes: 4.02%",size = 4) +
annotate("text", x = 14, y = 17000,
label = "Dispensable Genes: 49.59%",size =4) +
annotate("text", x = 17, y = 23000,
label = "Private Genes: 19.30%",size = 4)
当然也参考了明哥的一些代码。最后祝大家中秋快乐!
3、今晚的药大夜空
欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦, 数据和代码已上传至 QQ群,欢迎加入下载。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀CIRCexplorer3: 对 circRNA 进行相对定量
◀circRNA-seq:CIRCexplorer2 使用指南(二)
◀circRNA-seq:CIRCexplorer2 使用指南(一)
◀...