gpt4 book ai didi

r - ggplot2:强制为空的二级类别留出空间

转载 作者:行者123 更新时间:2023-12-02 13:22:49 24 4
gpt4 key购买 nike

我试图为多级分组箱线图保留“空白空间”。

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))

enter image description here

如果我强制其中一个组为空:

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))

enter image description here

第二组“b”现已扩展以填充空间。我想要的是:

enter image description here

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])依然不留空白。我尝试了一种解决方法,即注入(inject)越界 x值并使用 scale_y_continuous(limits) 强制其离开屏幕,但是ggplot2对我来说太聪明了,再次缩小了差距。

是否有优雅的(即 ggplot2 机制中的“正确”)解决方案?

最佳答案

coord_cartesian 是否是您正在寻找的解决方案?

它会放大并且不会像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))

enter image description here

关于r - ggplot2:强制为空的二级类别留出空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com