寻找更好的方法来绘制数据

时间:2015-06-04 23:49:39

标签: r plot ggplot2

我的数据描述了几个人的几次测量(每个人都是在几个不同的时间点进行的几次测量)。

我想将数据显示为测量与个体的散点图。因为对于每个人我有几个测量值,这意味着我在每个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 个答案:

答案 0 :(得分: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")