我的数据描述了几个人的几次测量(每个人都是在几个不同的时间点进行的几次测量)。
我想将数据显示为测量与个体的散点图。因为对于每个人我有几个测量值,这意味着我在每个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)
我想知道是否有更优雅的方式来呈现数据(也许是一种ggplot方式?)
请注意,我在数据中寻找的信号(这就是我生成它们的方式)是每个人的测量结果与他们的符号相关。如果它们的符号不相关,它们应该散布在y轴的两侧。
答案 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")