Mercurial > repos > mnhn65mo > butterfly_analysis
diff stat_bag.r @ 8:73d80db53ecc draft default tip
Uploaded
author | mnhn65mo |
---|---|
date | Wed, 22 May 2019 09:28:37 -0400 |
parents | 22813beb2fa8 |
children |
line wrap: on
line diff
--- a/stat_bag.r Mon Aug 13 10:06:35 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -library(ggplot2) -StatBag <- ggproto("Statbag", Stat, - compute_group = function(data, scales, prop = 0.5) { - - ################################# - ################################# - # originally from aplpack package, plotting functions removed - plothulls_ <- function(x, y, fraction, n.hull = 1, - col.hull, lty.hull, lwd.hull, density=0, ...){ - # function for data peeling: - # x,y : data - # fraction.in.inner.hull : max percentage of points within the hull to be drawn - # n.hull : number of hulls to be plotted (if there is no fractiion argument) - # col.hull, lty.hull, lwd.hull : style of hull line - # plotting bits have been removed, BM 160321 - # pw 130524 - if(ncol(x) == 2){ y <- x[,2]; x <- x[,1] } - n <- length(x) - if(!missing(fraction)) { # find special hull - n.hull <- 1 - if(missing(col.hull)) col.hull <- 1 - if(missing(lty.hull)) lty.hull <- 1 - if(missing(lwd.hull)) lwd.hull <- 1 - x.old <- x; y.old <- y - idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] - for( i in 1:(length(x)/3)){ - x <- x[-idx]; y <- y[-idx] - if( (length(x)/n) < fraction ){ - return(cbind(x.hull,y.hull)) - } - idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx]; - } - } - if(missing(col.hull)) col.hull <- 1:n.hull - if(length(col.hull)) col.hull <- rep(col.hull,n.hull) - if(missing(lty.hull)) lty.hull <- 1:n.hull - if(length(lty.hull)) lty.hull <- rep(lty.hull,n.hull) - if(missing(lwd.hull)) lwd.hull <- 1 - if(length(lwd.hull)) lwd.hull <- rep(lwd.hull,n.hull) - result <- NULL - for( i in 1:n.hull){ - idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] - result <- c(result, list( cbind(x.hull,y.hull) )) - x <- x[-idx]; y <- y[-idx] - if(0 == length(x)) return(result) - } - result - } # end of definition of plothulls - ################################# - - - # prepare data to go into function below - the_matrix <- matrix(data = c(data$x, data$y), ncol = 2) - - # get data out of function as df with names - setNames(data.frame(plothulls_(the_matrix, fraction = prop)), nm = c("x", "y")) - # how can we get the hull and loop vertices passed on also? - }, - - required_aes = c("x", "y") -) - -#' @inheritParams ggplot2::stat_identity -#' @param prop Proportion of all the points to be included in the bag (default is 0.5) -stat_bag <- function(mapping = NULL, data = NULL, geom = "polygon", - position = "identity", na.rm = FALSE, show.legend = NA, - inherit.aes = TRUE, prop = 0.5, alpha = 0.3, ...) { - layer( - stat = StatBag, data = data, mapping = mapping, geom = geom, - position = position, show.legend = show.legend, inherit.aes = inherit.aes, - params = list(na.rm = na.rm, prop = prop, alpha = alpha, ...) - ) -} - - -geom_bag <- function(mapping = NULL, data = NULL, - stat = "identity", position = "identity", - prop = 0.5, - alpha = 0.3, - ..., - na.rm = FALSE, - show.legend = NA, - inherit.aes = TRUE) { - layer( - data = data, - mapping = mapping, - stat = StatBag, - geom = GeomBag, - position = position, - show.legend = show.legend, - inherit.aes = inherit.aes, - params = list( - na.rm = na.rm, - alpha = alpha, - prop = prop, - ... - ) - ) -} - -#' @rdname ggplot2-ggproto -#' @format NULL -#' @usage NULL -#' @export -GeomBag <- ggproto("GeomBag", Geom, - draw_group = function(data, panel_scales, coord) { - n <- nrow(data) - if (n == 1) return(zeroGrob()) - - munched <- coord_munch(coord, data, panel_scales) - # Sort by group to make sure that colors, fill, etc. come in same order - munched <- munched[order(munched$group), ] - - # For gpar(), there is one entry per polygon (not one entry per point). - # We'll pull the first value from each group, and assume all these values - # are the same within each group. - first_idx <- !duplicated(munched$group) - first_rows <- munched[first_idx, ] - - ggplot2:::ggname("geom_bag", - grid:::polygonGrob(munched$x, munched$y, default.units = "native", - id = munched$group, - gp = grid::gpar( - col = first_rows$colour, - fill = alpha(first_rows$fill, first_rows$alpha), - lwd = first_rows$size * .pt, - lty = first_rows$linetype - ) - ) - ) - - - }, - - default_aes = aes(colour = "NA", fill = "grey20", size = 0.5, linetype = 1, - alpha = NA, prop = 0.5), - - handle_na = function(data, params) { - data - }, - - required_aes = c("x", "y"), - - draw_key = draw_key_polygon -)