2017-11-02 13 views
1

私は毎週収集されるデータを持っています。私は、毎週1回、一連のバイオリンプロットを示すグラフを持っていたいと思います。その上に、私はトレンドラインを持っていたいと思います。問題は、ヴァイオリンプロットを分離するためには、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 

答えて

1
# 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) 

enter image description here

関連する問題