[英]R ggplot actuals and multiple simulated points in same plot with legend
如何为模拟预测及其实际点的平均值绘制 ggplot?
对于第 1 个月到第 9 个月,分配了一个实际(df)点,第 10 个月和第 11 个月,需要用图例绘制模拟的 5 个点和平均点
#actual
month<-1:9
df<-c(0.20, 0.342, 0.710, 0.228, 0.124, 0.203, 0.956, 0.593, 0.195)
actual<-data.frame(month, df)
#simPred for month 10:11
sim1<-c(0.182, 0.235)
sim2<-c(0.165, 0.233)
sim3<-c(0.174, 0.258)
sim4<-c(0.139, 0.393)
sim5<-c(0.201, 0.412)
simPred<-data.frame(sim1, sim2,sim3,sim4,sim5)%>%
add_column(month=seq(from=length(month)+1, to=length(month)+nrow(simPred), by=1), Means=rowMeans(simPred[, 1:5]))
#combined
melted<-merge(actual, simPred, all=TRUE, by="month")
> melted
month df sim1 sim2 sim3 sim4 sim5 Means
1 1 0.200 NA NA NA NA NA NA
2 2 0.342 NA NA NA NA NA NA
3 3 0.710 NA NA NA NA NA NA
4 4 0.228 NA NA NA NA NA NA
5 5 0.124 NA NA NA NA NA NA
6 6 0.203 NA NA NA NA NA NA
7 7 0.956 NA NA NA NA NA NA
8 8 0.593 NA NA NA NA NA NA
9 9 0.195 NA NA NA NA NA NA
10 10 NA 0.182 0.165 0.174 0.139 0.201 0.1722
11 11 NA 0.235 0.233 0.258 0.393 0.412 0.3062
这个样子怎么样? 我们可以将 pivot 你的数据转换成长格式然后合并。
library(tidyverse)
month<-1:9
df<-c(0.20, 0.342, 0.710, 0.228, 0.124, 0.203, 0.956, 0.593, 0.195)
actual<-data.frame(month, df)
#simPred for month 10:11
sim1<-c(0.182, 0.235)
sim2<-c(0.165, 0.233)
sim3<-c(0.174, 0.258)
sim4<-c(0.139, 0.393)
sim5<-c(0.201, 0.412)
simPred<-data.frame(sim1, sim2,sim3,sim4,sim5) %>%
mutate(month=c(10, 11)) %>%
pivot_longer(names_to = "sim", cols=starts_with("sim"), values_to="df") %>%
select(-sim) %>%
rbind(actual)
ggplot(simPred, aes(x=month, y=df)) +
geom_point() +
stat_summary(fun.data = "mean_cl_boot", color="red")
simPred<-data.frame(sim1, sim2,sim3,sim4,sim5)
reshaped<-melt(simPred, id.vars='month')
ggplot(data=actual ,aes(x=month, y=df))+geom_line(color='magenta')+
geom_point()+
geom_point(data=reshaped,aes(x=month, y=value, col=variable),size=1)+
geom_line(data=subset(reshaped,variable=='Means', select = c(month,variable,value)),
aes(x=month, y=value))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.