一个画双层pie图的函数

时间:2022-07-22
本文章向大家介绍一个画双层pie图的函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

函数如下:

donuts <- function(x, group = 1, labels = NA, col = NULL, radius = c(.7, 1)) { 
    group <- rep_len(group, length(x)) 
    ug <- unique(group) 
    tbl <- table(group)[order(ug)]

    col <- if (is.null(col)) 
    seq_along(ug) else rep_len(col, length(ug)) 
    col.main <- Map(rep, col[seq_along(tbl)], tbl) 
    col.sub <- lapply(col.main, function(x) { 
    al <- head(seq(0, 1, length.out = length(x) + 2L)[-1L], -1L) 
    Vectorize(adjustcolor)(x, alpha.f = al) 
    })

    plot.new()

    par(new = TRUE) 
    pie(x, border = NA, radius = radius[2L], 
     col = unlist(col.sub), labels = labels)

    par(new = TRUE) 
    pie(x, border = NA, radius = radius[1L], 
     col = unlist(col.main), labels = NA) 
}

调用方法:

with(browsers, 
    donuts(share, browser, sprintf('%s: %s%%', version, share), 
      col = c('cyan2','red','orange','green','dodgerblue2')) 
)

生成图形如下所示: