Can you make geom_ribbon leave a gap for missing values?

本小妞迷上赌 提交于 2019-11-29 06:59:31

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:

The Image I got is not the same as yours, and It seems that something wrong happened here. Any suggestions?

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!