如何在空间上分离不同系列的地毯图

Dre*_*een 6 r ggplot2

我试图以图形方式评估数据集的分布(双峰与单峰),其中每个数据集的数据点数可以有很大差异.我的问题是使用像地块这样的东西来指示数据点的数量,但是为了避免出现一系列具有许多数据点的问题,这个数据点过多地只有几个点.

目前我的工作中ggplot2,结合geom_densitygeom_rug像这样:

# Set up data: 1000 bimodal "b" points; 20 unimodal "a" points
set.seed(0); require(ggplot2)
x <- c(rnorm(500, mean=10, sd=1), rnorm(500, mean=5, sd=1), rnorm(20, mean=7, sd=1))
l <- c(rep("b", 1000), rep("a", 20))
d <- data.frame(x=x, l=l)

ggplot(d, aes(x=x, colour=l)) + geom_density() + geom_rug()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这几乎可以做我想要的 - 但是"a"点被"b"点淹没了.

我砍死使用的解决方案geom_point,而不是geom_rug:

d$ypos <- NA
d$ypos[d$l=="b"] <- 0
d$ypos[d$l=="a"] <- 0.01

ggplot() + 
  geom_density(data=d, aes(x=x, colour=l)) +
  geom_point(data=d, aes(x=x, y=ypos, colour=l), alpha=0.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,这是不令人满意的,因为必须手动调整y位置.有没有更自动的方法来分离不同系列的地毯图,例如使用位置调整?

Did*_*rts 12

一种方法是使用两个geom_rug()调用 - 一个用于b,另一个用于a.然后在一geom_rug()组中将sides="t"它们绘制在顶部.

ggplot(d, aes(x=x, colour=l)) + geom_density() + 
  geom_rug(data=subset(d,l=="b"),aes(x=x)) +
  geom_rug(data=subset(d,l=="a"),aes(x=x),sides="t")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这对于两组来说效果很好,但我想知道是否有一种简单的方法可以将地毯堆叠三组或更多组,例如[此处](https://d2mvzyuse3lwjc.cloudfront.net/images/WikiWeb/Rug_Plot/Distribution_Curve_with_Rug.png?v =10549)? (2认同)