我有每周收集的数据。我想有一个图表,显示一系列小提琴情节,每周一个。最重要的是,我想有一个趋势线。问题似乎是,为了将小提琴图分开,Week变量必须是一个因子,但为了绘制趋势线,Week变量必须是连续的。我如何获得两者?
Week = as.Date(c("2017-10-1", "2017-10-8", "2017-10-15"))
mydata = data.frame(Week = sample(Week, 200, T), v_1 = sample.int(5, 200, T))
p1 = ggplot(mydata, aes(x = factor(Week), y = v_1)) # create the plot stub
p1 + geom_violin() # just violin plots
p1 + geom_smooth(method = "lm") # nothing
p1 + geom_violin() + geom_smooth() # just violin plots
p2 = ggplot(mydata, aes(x = Week, y = v_1)) # new plot stuf
p2 + geom_violin() # single violin plot, not separated by week
p2 + geom_smooth(method = "lm") # trend line
p2 + geom_violin() + geom_smooth(method = "lm") # trend line over single violin plot
答案 0 :(得分:2)
# Generate data from 3 normal distributions with means -3, 3, and 6
set.seed(1)
n <- 200
dates <- as.Date(c("2017-10-1", "2017-10-8", "2017-10-15"))
mydata = data.frame(Week = rep(dates,each=n), v_1 = c(rnorm(n,-3),rnorm(n,3),rnorm(n,6)))
# Estimate a linear regression model: x is the group number
cf <- coef(lm(v_1~as.numeric(factor(Week)), data=mydata))
# Plot means (red dots) and the regression line (trend)
library(ggplot2)
ggplot(mydata, aes(x = factor(Week), y = v_1)) +
geom_violin() +
stat_summary(aes(group=1),fun.y=mean, geom="point", color="red", size=3) +
geom_abline(slope=cf[2], intercept=cf[1], lwd=.8)