如果我有这样的数据框:
obs<-rnorm(20)
d<-data.frame(year=2000:2019,obs=obs,pred=obs+rnorm(20,.1))
d$pup<-d$pred+.5
d$plow<-d$pred-.5
d$obs[20]<-NA
d
我希望观察和模型预测误差条看起来像:
(p1<-ggplot(data=d)+aes(x=year)
+geom_point(aes(y=obs),color='red',shape=19)
+geom_point(aes(y=pred),color='blue',shape=3)
+geom_errorbar(aes(ymin=plow,ymax=pup))
)
如何添加标识红点作为观察值的图例/比例/关键点以及带误差线的蓝色加号作为带范围的点预测?
答案 0 :(得分:3)
这是将pred / obs熔化成一列的一种解决方案。由于代表无法发布图片。
library(ggplot2)
obs <- rnorm(20)
d <- data.frame(dat=c(obs,obs+rnorm(20,.1)))
d$pup <- d$dat+.5
d$plow <- d$dat-.5
d$year <- rep(2000:2019,2)
d$lab <- c(rep("Obs", 20), rep("Pred", 20))
p1<-ggplot(data=d, aes(x=year)) +
geom_point(aes(y = dat, colour = factor(lab), shape = factor(lab))) +
geom_errorbar(data = d[21:40,], aes(ymin=plow,ymax=pup), colour = "blue") +
scale_shape_manual(name = "Legend Title", values=c(6,1)) +
scale_colour_manual(name = "Legend Title", values=c("red", "blue"))
p1
编辑:感谢代表。已添加图片
答案 1 :(得分:1)
这是一个ggplot
解决方案,不需要熔化和分组。
set.seed(1) # for reproducible example
obs <- rnorm(20)
d <- data.frame(year=2000:2019,obs,pred=obs+rnorm(20,.1))
d$obs[20]<-NA
library(ggplot2)
ggplot(d,aes(x=year))+
geom_point(aes(y=obs,color="obs",shape="obs"))+
geom_point(aes(y=pred,color="pred",shape="pred"))+
geom_errorbar(aes(ymin=pred-0.5,ymax=pred+0.5))+
scale_color_manual("Legend",values=c(obs="red",pred="blue"))+
scale_shape_manual("Legend",values=c(obs=19,pred=3))
这将创建一个颜色和形状比例,每个部分有两个组件(“obs”和“pred”)。然后使用scale_*_manual(...)
为颜色设置这些比例(“红色”,“蓝色”)的值,为比例设置(19,3)。
通常,如果您只有两个类别,例如“obs”和“pred”,那么这是一种合理的方式来使用ggplot
,并避免将所有内容合并到一个数据框中。如果您有两个以上的类别,或者它们是数据集的组成部分(例如,实际的分类变量),那么您可以像在另一个答案中那样做得更好。
请注意,您的示例遗漏了year
列,因此您的代码无法运行。