在 ggplot r 中留下空白处理的轴刻度

Leave axis ticks for blank treatments in ggplot r

我有一堆 dfs,其中有 19 种处理方法,我正在绘制其中的子集。试图弄清楚如何在图中为所有 19 种处理保留列,即使它们没有在该特定图中绘制的值。下面是较小的可重现示例。

 set.seed(3)
 df <- data.frame(matrix(ncol=2,nrow=200))
 df$X1 <- rep(c("A","B","C","D","E"),each = 40)
 df$X2 <- runif(200,20,50)

 ggplot(df,aes(x=X1,y=X2,color=X1))+
 geom_dotplot(binaxis="y",data= df[df$X2>48,])+
 geom_boxplot(data=df[df$X2>48,],varwidth = T)

看到只有 A、B、C、E 列了吗?我如何确保它为 D 保留一列?此外,我还需要它跳过一种颜色,因此在所有不同的图中,A、B、C、D 和 E 始终是一致的颜色。

(如果可能的话,我最好将子集代码放在 ggplot() 框中,这样我就不必一遍又一遍地编写子集了)。

我试过添加

scale_x_date(drop=F)+ 

作为一条线,但没有改变。

谢谢。

您可以在 ggplot() 主调用中对数据进行子集化。 x-axis 和颜色的范围可以手动设置:

fullvar <- unique(df$X1)

ggplot(df[df$X2 > 48,],aes(x=X1,y=X2,color=X1))+
  geom_dotplot(binaxis="y")+
  geom_boxplot(varwidth = T) +
  scale_x_discrete(limits = fullvar) +
  scale_color_discrete(limits = fullvar)

编辑:忽略了颜色问题。