ggplot2:强制 space 用于空二级类别
ggplot2: forcing space for empty second-level category
我试图为多级分组箱线图保留 "empty space"。
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
如果我强制其中一组为空:
dat <- subset(dat, ! (cat1 == 'b' & cat2 == 'B'))
table(dat$cat1, dat$cat2)
##
## A B C
## a 9 9 7
## b 8 0 5
## c 13 11 6
## d 11 10 5
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
第二组 "b" 现在已扩展以填充 space。我想要的是:
SO 9818835(强制出现一个空级别)在顶层工作正常,但我无法弄清楚如何让它在第二级类别中工作。在 scale_x_discrete(...)
中,我尝试设置:
breaks=letters[1:4]
breaks=LETTERS[1:3]
breaks=list(letters[1:4], LETTERS[1:3])
(一刺)
breaks=NULL
breaks=func
其中 func <- function(x, ...) { browser(); 1; }
以便排除故障;它只提供 letters[1:4]
并且从不提示进入第二个级别
用interactions(letters[1:4], LETTERS[1:3])
还是不留空space。我通过注入越界 x
值并使用 scale_y_continuous(limits)
强制它离开屏幕尝试了一种解决方法,但是 ggplot2
对我来说太聪明了,再次缩小了差距。
是否有优雅的(即 ggplot2
机制中的 "correct")解决方案?
coord_cartesian
可能是您正在寻找的解决方案吗?
它将放大并且不会尝试 "outsmart" 像 scale_y_continuous
这样的数据
library(dplyr)
library(ggplot2)
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
LARGE_VALUE <- 2
dat <- dat %>%
mutate(x = ifelse(cat1 == 'b' & cat2 == 'B',
LARGE_VALUE,
x))
ggplot(dat, aes(cat1, x)) +
geom_boxplot(aes(fill=cat2)) +
coord_cartesian(ylim = c(0,1))
我试图为多级分组箱线图保留 "empty space"。
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
如果我强制其中一组为空:
dat <- subset(dat, ! (cat1 == 'b' & cat2 == 'B'))
table(dat$cat1, dat$cat2)
##
## A B C
## a 9 9 7
## b 8 0 5
## c 13 11 6
## d 11 10 5
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
第二组 "b" 现在已扩展以填充 space。我想要的是:
SO 9818835(强制出现一个空级别)在顶层工作正常,但我无法弄清楚如何让它在第二级类别中工作。在 scale_x_discrete(...)
中,我尝试设置:
breaks=letters[1:4]
breaks=LETTERS[1:3]
breaks=list(letters[1:4], LETTERS[1:3])
(一刺)breaks=NULL
breaks=func
其中func <- function(x, ...) { browser(); 1; }
以便排除故障;它只提供letters[1:4]
并且从不提示进入第二个级别
用interactions(letters[1:4], LETTERS[1:3])
还是不留空space。我通过注入越界 x
值并使用 scale_y_continuous(limits)
强制它离开屏幕尝试了一种解决方法,但是 ggplot2
对我来说太聪明了,再次缩小了差距。
是否有优雅的(即 ggplot2
机制中的 "correct")解决方案?
coord_cartesian
可能是您正在寻找的解决方案吗?
它将放大并且不会尝试 "outsmart" 像 scale_y_continuous
library(dplyr)
library(ggplot2)
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
LARGE_VALUE <- 2
dat <- dat %>%
mutate(x = ifelse(cat1 == 'b' & cat2 == 'B',
LARGE_VALUE,
x))
ggplot(dat, aes(cat1, x)) +
geom_boxplot(aes(fill=cat2)) +
coord_cartesian(ylim = c(0,1))