在小提琴情节中绘制空组

Plot empty groups in violin plot

我想比较一些小提琴图。但是我 运行 遇到了一个问题,即组为空的情况:我想要绘制一个空槽,以便更容易比较多个图。

假设我有一个数据框:

df = data.frame("x"=rep(c(1:4), 3), y=rep(c(1:4), each=3))
df$y[df$x==3] = NA 

所以第 3 组全部为 NA,我使用 vioplot 绘制它:

library(vioplot)
vioplot(y ~ x , df)

然后我得到了没有组 3 的图。有没有办法我可以绘制所有组 1:4 但 3 只是空的?

谢谢

对于图表,你能把 NA 改成 0 吗?例如

df <- df %>% 
  zoo::na.fill(0)

vioplot(y ~ x , df, ylim = c(1, 4))

或者,使用 ggplot...

df %>% ggplot() + geom_violin(aes(x=as.factor(x), y=y))

给予

也是

df %>% ggplot() + geom_violin(aes(x, y=y, group=x))

我使用 at 参数找到了针对我的特定问题的变通解决方案:

df = data.frame("x"=rep(c(1:4), 3), y=rep(c(1:4), each=3))
df$y[df$x==3] = NA

library(vioplot)
vioplot(y ~ x , df, at=unique(df$x[! is.na(df$y)]), xaxt="n")
axis(1, at=unique(df$x))