Can you make geom_ribbon leave a gap for missing values?

前端 未结 1 1093
野性不改
野性不改 2020-12-18 02:05

I am following up a discussion started at: How can I make geom_area() leave a gap for missing values?. It seems like geom_ribbon is not longer leaving gaps for missing value

相关标签:
1条回答
  • 2020-12-18 02:21

    Looks like a bug in ggplot2, there seems to be a missing handle_na function that needs to be added as a part of a new unified way of dealing with NA values.

    Update:

    The first post here refined an entire new ggproto to fix this, but I realized that as a one-liner workaround you can just override the handle_na function like I do in the code below (# fix GeomRibbon):

    require(dplyr)
    require(ggplot2)
    require(grid)
    
    set.seed(1)
    
    test <- data.frame(x = rep(1:10, 3), y = abs(rnorm(30)), z = rep(LETTERS[1:3], 10)) 
               %>% arrange(x, z)
    
    test[test$x == 4, "y"] <- NA
    
    test$ymax <- test$y
    test$ymin <- 0
    zl <- levels(test$z)
    for (i in 2:length(zl)) {
        zi <- test$z == zl[i]
        zi_1 <- test$z == zl[i - 1]
        test$ymin[zi] <- test$ymax[zi_1]
        test$ymax[zi] <- test$ymin[zi] + test$ymax[zi]
    }
    
    
    # fix GeomRibbon
    GeomRibbon$handle_na <- function(data, params) {  data }
    
    ggplot(test, aes(x = x,y=y, ymax = ymax, ymin = ymin, fill = z)) +
      geom_ribbon() +
      scale_x_continuous(breaks = 1:10)
    

    yielding:

    0 讨论(0)
提交回复
热议问题