2015-06-04 53 views
2

我有描述從幾個人(每個人在幾個不同的時間點拍攝的幾個測量值)取得的幾個測量值的數據。尋找一種更好的繪製數據的方法

我想將數據呈現爲測量值與個人的散點圖。因爲對於每個人我有幾個測量,這意味着我將在每個x軸點有一堆點。

下面是一個例子隨機碼來生成這些數據:

set.seed(1) 
    n.individuals <- 10 
    n.measurements <- 15 
    vars <- runif(n.individuals, 0.1, 1) 
    means <- runif(n.individuals, 1, 5) 
    negative.idx <- sample(n.individuals, n.individuals/2) 
    means[negative.idx] <- -1*means[negative.idx] 
    df <- data.frame(measurement=c(sapply(1:n.individuals, function(x) rnorm(n.measurements, means[x], sqrt(vars[x])))), 
        individual=c(sapply(1:n.individuals, function(x) rep(x, n.measurements)))) 

這裏是我是如何呈現的數據,到目前爲止:

#add colors 
    cols <- rgb(runif(n.measurements),runif(n.measurements),runif(n.measurements)) 
    df$col <- rep(cols, n.individuals) 

    #simple plot 
    plot(df$individual, df$measurement, col=df$col, lwd=2, xlab = "individual", ylab = "measurement") 
    abline(h=0,lty=2) 
    abline(v=seq(min(df$individual)-0.5, max(df$individual)+0.5, 1),lty=2) 

enter image description here

我不知道是否有一個更優雅的方式來呈現數據(也許是ggplot的方式?)

請注意,我在數據中查找的信號(以及我如何生成這些信號)是每個人的測量值都與其符號相關。如果它們的符號不相關,它們應該分散在y軸的兩側。

+1

抖動,用自己的顏色代碼一起可能是一個好主意:http://docs.ggplot2.org/current/geom_jitter.html –

+3

是不是這只是一個'? boxplot'本質上? – thelatemail

+0

我猜想一個盒子圖的抖動點和顏色編碼應該這樣做。 – user1701545

回答

1

首先,我會抖動你的個人,使個人測量不重疊。使用此代碼:

plot(jitter(df$individual), df$measurement, col=df$col, 
    lwd=2, xlab = "individual", ylab = "measurement") 

有一百萬種方法來繪製它在ggplot。這裏有一個快速的小提琴圖:

p <- ggplot(df, aes(factor(individual), measurement)) 
p + geom_violin(aes(fill = factor(individual))) + 
    geom_hline((aes(yintercept = 0))) + geom_jitter() + xlab("Individual") 
相關問題