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

时间:2013-05-06 16:00:56

标签: 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()

enter image description here

这几乎可以达到我的目的 - 但“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)

enter image description here

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

1 个答案:

答案 0 :(得分:11)

一种方法是使用两个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")

enter image description here