ggmuller由来是作者Rob Noble当时看见 Hermann Joseph Muller 发表了一张关于性别进化优势图(所以作者将这种图形名命为Muller 图)

Rob Noble 很感兴趣,于是花了几天时间用ggplot2实现了 Muller 图 的绘制,也就有了我们今天使用的R包。 ggmuller 主要用来绘制种群进化、肿瘤发展等可视化展示。

ggmuller的主要函数为get_Muller_df,需要数据的数据为两个数据框,第一个是文件是包含进化关系的临接矩阵,第二个文件随着时间的变化,对应时间点基因型频率的变化情况, 然后利用函数Muller_plot进行可视化展示。


# 安装正式版
install.packages("ggmuller")
# 安装github开发版
devtools::install_github("robjohnnoble/ggmuller")
# 加载
library(ggmuller)

根据作者的文章,整理了一个示例代码,供大家学习:


library(ggmuller)
library(ggplot2)
library(ggthemes)
library(gridExtra)


# 构建进化关系的临接矩阵
edges1 <- data.frame(Parent = 1:3, Identity = 2:4)

# 构建对应时间点基因型频率的变化情况
pop_seq <- function(gens, lambda, start_gen){
        c(rep(0, start_gen),
      exp(lambda * gens[0:(length(gens) - start_gen)]))
}

# 代数
gens <- 0:150 
# 定义基础进化速率
lambda <- 0.1 
pop1 <- data.frame(
    Generation = rep(gens, 4),
    Identity = rep(1:4, each = length(gens)),
    Population = c(
        1E2 * pop_seq(gens, lambda, 0),
        pop_seq(gens, 2 * lambda, 0),
        pop_seq(gens, 2 * lambda, 3),
        pop_seq(gens, 2 * lambda, 8)
    )
)

# 生成Muller图数据框
Muller_df1 <- get_Muller_df(edges1, pop1)
# 自定义颜色
my_palette <- c("white", "skyblue2", "red", "green3")

# 绘图,基于ggpot2,可以在此基础上添加ggplot元素
plot1 <-
    Muller_plot(Muller_df1, palette = my_palette) + 
    theme_few() + 
    xlim(0, 150) + 
    scale_x_continuous(expand = c(0, 0)) +
    ylim(0, 1) + 
    scale_y_continuous(expand = c(0, 0))

edges2 <- data.frame(Parent = 1:3,
                     Identity = 2:4)
pop2 <- data.frame(
    Generation = rep(gens, 4),
    Identity = rep(1:4, each = length(gens)),
    Population = c(
        1E2 * pop_seq(gens, lambda, 0),
        pop_seq(gens, 2 * lambda, 0),
        pop_seq(gens, 4 * lambda, 40),
        pop_seq(gens, 8 * lambda, 80)
    )
)
Muller_df2 <- get_Muller_df(edges2, pop2)
plot2 <-
    Muller_plot(Muller_df2, palette = my_palette) + 
    theme_few() + 
    xlim(0, 150) + 
    scale_x_continuous(expand = c(0, 0))+ 
    ylim(0, 1) + 
    scale_y_continuous(expand = c(0, 0))

# 组合图片
grid.arrange(plot1, plot2)

参考资料:

1.https://thesefewlines.wordpress.com/2016/08/20/how-to-ggmuller/