gpt4 book ai didi

r - geom_boxplot() : forcing an empty level to appear

转载 作者:行者123 更新时间:2023-12-03 05:17:23 25 4
gpt4 key购买 nike

我无法找到一种方法来要求 ggplot2 在箱线图中显示空级别,而不用实际缺失值填充我的数据框。这是可重现的代码:

# fake data
dftest <- expand.grid(time=1:10,measure=1:50)
dftest$value <- rnorm(dim(dftest)[1],3+0.1*dftest$time,1)

# and let's suppose we didn't observe anything at time 2
# doesn't work even when forcing with factor(..., levels=...)
p <- ggplot(data=dftest[dftest$time!=2,],aes(x=factor(time,levels=1:10),y=value))
p + geom_boxplot()

# only way seems to have at least one actual missing value in the dataframe
dftest2 <- dftest
dftest2[dftest2$time==2,"value"] <- NA
p <- ggplot(data=dftest2,aes(x=factor(time),y=value))
p + geom_boxplot()

所以我想我错过了一些东西。在处理平衡实验时,这不是问题,其中这些丢失的数据可能在数据框中是明确的。但以队列中观察到的数据为例,这意味着将数据与未观察到的组合的缺失值进行插补。

最佳答案

我们可以控制合适的比例函数中的中断,在本例中为scale_x_discrete。确保使用参数 drop = FALSE:

p <- ggplot(data = dftest[dftest$time != 2, ], 
aes(x = factor(time, levels = 1:10), y = value))
p + geom_boxplot() +
scale_x_discrete("time", breaks = factor(1:10), drop = FALSE)

enter image description here

<小时/>

我喜欢在将数据发送到 ggplot 之前进行数据操作。我认为这使代码更具可读性。我自己就是这样做的,但结果是一样的。但请注意,ggplot 比例变得更加简单,因为您不必指定分隔符:

dfplot <- dftest[dftest$time != 2, ]
dfplot$time <- factor(dfplot$time, levels = 1:10)

ggplot(data = dfplot, aes(x = time, y = value)) +
geom_boxplot() +
scale_x_discrete("time", drop = FALSE)

关于r - geom_boxplot() : forcing an empty level to appear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9818835/

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