SCI图表重现-4 R语言ggplot2一次性画多个饼状图
今天依旧跟着小明学习复现SCI的图表,今天复现的论文为Whole-genome resequencing of 445 Lactuca accessions reveals the domestication history of cultivated lettuce
最基本的想法是通过单独画一个饼图,然后进行拼接,但是有一个新遇到的包可以实现这个功能 scattermore可以直接指定输入数据,然后一次性将所有拼图全部画好。
help(package = "scatterpie")
需要的格式如下图所示
x, y指定饼图的位置坐标,接下来就紧跟饼状图每一个部分色数据,哪接下来就模仿这一个数据**
模仿数据的代码**
x <- rep(seq(2,14,2),2)
y <- as.numeric(as.character(gl(4,7,labels = c(2,4,6,8))))
B <- 100-A
A <- sample(1:100,28)
df <- data.frame(x = x, y = y, A= A, B = B, region = as.character(1:28))
df
str(df)
head(df)
画图代码
library(scatterpie)
library(ggplot2)
ggplot() +
geom_scatterpie(data = df, aes(x, y, group = region, r = 0.9), cols = c("A", "B")) +
coord_equal() +
theme_void() +
theme(legend.position = "none")+
scale_fill_manual(values = c("#5b9bd5","#e64b35"))
接下来添加头部的图例以及左侧的文字
首先先构造数据
df1 <- data.frame(x = seq(1.9,14,2),y = 9.5, label = c("A", "A", "C", "C", "C", "A", "T"))
df2 <- data.frame(x = seq(2.1, 15, 2), y = 9.5, label = c("A", "A", "C", "C", "C", "A", "T"))
df3 <- data.frame(x = 16, y = c(2,4,6,8), label = c("L.sativa(n = 133)", "Non-shattering admixed (n=6)", "Shattering admixed (n=2)", "L.serriola(n=192)"))
ggplot() +
geom_scatterpie(data = df, aes(x, y, group = region, r = 0.9), cols = c("A", "B")) +
coord_equal() +
theme_void() +
theme(legend.position = "none")+
scale_fill_manual(values = c("#5b9bd5","#e64b35"))+
geom_label(data = df1, aes(x = x-0.1, y = y, label = label),
fill = "#5b9bd5")+
geom_label(data = df2, aes(x = x+0.1, y = y, label = label),
fill = "#e64b35")+
geom_text(data = df3, aes(x = x, y = y, label = label))
最后得到这一张图