跟着Science学画图:R语言ggplot2实现图中嵌图
2021-09-19 本文已影响0人
小明的数据分析笔记本
论文是
image.pngDe novo assembly, annotation, and comparative analysis of 26 diverse maize genomes
部分数据代码是公开的 下载链接https://zenodo.org/record/4781590#.YSB40Hzivic
论文本地pdf 玉米Science.pdf
附件本地pdf abg5289_Hufford_SM.pdf
今天的推文我们来重复一下论文中的Figure1c
image.png今天的推文主要是学习的是ggplot2作图的时候如何实现图中嵌图
数据集是 pan_matrix_stats.csv
,大家可以自己找到论文的数据下载链接,或者直接在公众号后台留言20210919获取今天推文的示例数据和代码
论文中提供的代码文件是 Figure_1_C_pan_gene_frequency.R
,但是有一个问题是他这个代码并不能完全画出Figure1c这个图
首先是画堆积柱形图
df<-read.delim("pan_matrix_stats.csv",
row.names = 1,
sep = ",")
df
library(dplyr)
library(ggplot2)
df %>%
ggplot(aes(x = number_genome_presence, y = n)) +
geom_bar(aes(fill = class),
position = "stack",
stat = "identity",
fill = "black") +
geom_bar(aes(alpha = Subgenome),
stat = "identity",
fill = "grey") +
scale_alpha_manual(values = c(0.9, 0.5, 0)) +
labs(x = "Number of Genomes",
y = "Number of Pan Genes",
fill = "Pan Gene Type",
alpha = "Maize Subgenome") +
scale_x_continuous(breaks = seq(1, 26, 1)) +
ylim(0, 30000) +
theme(text = element_text(size = 14),
legend.key = element_rect(fill = "black"),
legend.position = "none") +
theme_classic() -> gene_frequency_plot
gene_frequency_plot
image.png
然后画饼图
df %>%
select(class) %>%
count(class,sort = T) -> pan_gene_pct
pan_freq <- as.data.frame(pan_gene_pct)
pan_freq$class <- factor(pan_freq$class, levels = c("Core Gene", "Dispensable Gene","Private Gene","Near-Core Gene"))
pan_freq %>% mutate(percent = n/sum(n))
blank_theme <- theme_minimal() +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank(),
plot.title=element_text(size=0, face="bold")
)
bp<-ggplot(pan_freq, aes(x="", y=n, fill=class))+
geom_bar(width = 1, stat = "identity") +
ggsci::scale_fill_npg() +
coord_polar("y") +
blank_theme + theme(legend.position ="none")
bp
image.png
这里需要注意的一点是这个图和论文中的图并不一致,因为原文中画饼图的数据我没有找见是随便构造的
接下来是将两个图组合到一起
gene_frequency_plot +
theme(legend.position = "none")+
annotation_custom(
grob = ggplotGrob(bp),
xmin = 6,
xmax = 20,
ymin = 10000,
ymax = 25000
) -> pan_gene_frequency_anchor
pan_gene_frequency_anchor
image.png
接下来是添加文本注释
pan_gene_frequency_anchor+
annotate("text", x = 8, y = 20000,
label = "Core Genes: 27.09%",size = 4) +
annotate("text", x = 15, y = 24000,
label = "Near-Core Genes: 4.02%",size = 4) +
annotate("text", x = 14, y = 15000,
label = "Dispensable Genes: 49.59%",size =4) +
annotate("text", x = 19, y = 20000,
label = "Private Genes: 19.30%",size = 4) +
stat_summary(fun.y = sum,
aes(label = ..y..,
group = number_genome_presence),
geom = "text",
vjust=0.5,
size=3.5,
angle = 90,
hjust =-0.1 )
image.png
这个饼图对应的文本位置是有问题的,因为做饼状图的数据和论文中的不一致,这个就在这里不调整了。
最后一个问题是 他是如何实现原图中紧贴着x轴的那些颜色块的呢?
暂时没有想明白
论文中提供的代码也没有实现的代码
欢迎大家关注我的公众号
小明的数据分析笔记本
小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!