2013-05-06 65 views
4

我試圖以圖形方式評估數據集的分佈(雙峯型與單峯型),其中每個數據集的數據點數量可能差異很大。我的問題是使用諸如地毯圖的東西來指示數據點的數量,但是爲了避免出現一系列具有許多數據點的問題,並且只有少數幾點超出了系列。如何在空間上分離不同系列的地毯圖

目前我在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

這幾乎是我想要做什麼 - 但「一」點獲得由「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的位置必須手動調整。是否有更自動的方式來分隔不同系列的地毯,例如使用位置調整?

回答

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

相關問題