我正在尝试以图形方式评估数据集的分布(双峰与单峰),其中每个数据集的数据点数量可能有很大差异。我的问题是使用地毯图之类的东西来指示数据点的数量,但是为了避免让一个包含许多数据点的系列超过一个只有几个点的系列的问题。
目前我正在工作ggplot2
,结合geom_density
和geom_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()
这几乎可以满足我的要求-但是“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)
然而,这并不令人满意,因为必须手动调整 y 位置。是否有更自动的方法可以将不同系列的地毯图分开,例如使用位置调整?