如何防止ggplot从框图中删除缺失值

时间:2019-07-26 02:33:13

标签: ggplot2 boxplot missing-data

我想在箱图中显示所有可能的因素组合,即使它们未出现在数据中也是如此。但是ggplot会不断从数据中删除缺失值,因此会删除相应的框。有什么方法/黑客可以阻止这种情况吗?

例如,即使所有值均为NA,我都需要对所有组显示“ e”?顺便说一句,我不想​​用其他任何值替换NA。

set.seed(666)
dat <- data.frame(matrix(runif(60,1,20),ncol=6))
names(dat) <- letters[1:6]
longdat <- melt(dat,measure.vars=c('b','c','d','e','f'))
longdat$a <- 'a'
longdat2 <- longdat
longdat2$a <- 'xa'
longdat2$value[longdat2$variable=='e'] <- NA
longdat <- rbind(longdat,longdat2)
library(ggplot2)
ggplot(longdat, aes(x=variable, y=value, group=interaction(a,variable))) + 
    geom_boxplot(aes(colour = variable), position=position_dodge2(width=0.8,preserve='single'),na.rm=T)

t reflec

2 个答案:

答案 0 :(得分:1)

我更改了dat[,5] <- NA并融化后得到longdat中的“ e”因子,还制作了第二个数据帧,并用NA更改了zero并使用了它,并用白色更改了“ e”的颜色。

set.seed(666)
dat <- data.frame(matrix(runif(60,1,20),ncol=6))
names(dat) <- letters[1:6]

library(reshape2)
longdat <- melt(dat)
longdat <- longdat %>% mutate(value = ifelse(variable == "e",NA,value))
longdat2 <- longdat %>% mutate(value = ifelse(variable == "e",0,value))

library(ggplot2)
ggplot() + geom_boxplot(data = longdat2,aes(x=variable, y=value,colour = variable),na.rm = F) +
        scale_colour_manual(name = "Hello", 
                              labels = c("a","b","c","d","e","f"),values = c("green","red","black","blue","white","yellow"))

enter image description here

答案 1 :(得分:0)

e数据集使用melt作为索引变量。运行此代码时,您可能会看到“使用e作为id变量”。向数据集添加索引变量(可以是任何行-row_number(),可以是数字,无论什么),然后告诉melt将其用作索引将解决您的问题。

set.seed(666)
dat <- data.frame(matrix(runif(60,1,20),ncol=6))
names(dat) <- letters[1:6]
dat[,5] <- NA
dat <- dat %>% mutate(index = row_number())

library(reshape2)
longdat <- melt(dat, id.vars = 'index')
library(ggplot2)
ggplot(longdat, aes(x=variable, y=value)) + geom_boxplot(aes(colour = variable))

See the output here