我正在尝试使用一些预测数据来制作盒子和胡须图。并希望将观察结果添加到情节中。我在这里生成一个数据样本,以便您可以理解它的样子。
$forecasts<- data.frame(f_type=c(rep("A",9),rep("B",9)),Date=c(rep(as.Date("2007-01-31"),3),rep(as.Date("2007-02-28"),3),rep(as.Date("2007-03-31"),3),rep(as.Date("2007-01-31"),3),rep(as.Date("2007-02-28"),3),rep(as.Date("2007-03-31"),3)),value=c(10,50,60,05,90,20,30,46,39,69,82,48,65,99,75,15,49,27))
$observation<- data.frame(Dt=c(as.Date("2007-01-31"),as.Date("2007-02-28"),as.Date("2007-03-31")),obs=c(30,49,57))
根据预测,我可以使用ggplot2绘制方框和胡须图,如下所示。
$p<- ggplot(data = forecasts, aes(x=as.factor(Date), y=value))
p<- p + geom_boxplot(aes(fill=f_type))
现在我想将这些日期的观察结果添加到此图中。到目前为止,我尝试了以下内容:
$p<- p + geom_line(data = observation,aes(x=Dt,y=obs))
。
这给出了一个错误说:
错误:输入无效:date_trans仅适用于类Date的对象
以x轴为因子,如下所示:
$p<- p + geom_line(data = observation,aes(x=as.factor(Dt),y=obs))
我收到以下错误:
geom_path:每组只包含一个观察。你需要调整群体审美吗?
任何人都可以建议我如何做到这一点?提前谢谢。
答案 0 :(得分:3)
试试这个:
p<- ggplot(data = forecasts, aes(x=as.factor(Date), y=value))
p<- p + geom_boxplot(aes(fill=f_type))
p <- p + geom_hline(aes(yintercept=12), colour="#990000")
p
答案 1 :(得分:2)
forecasts<- data.frame(f_type = c(rep("A",9), rep("B",9)), Date = c(rep(as.Date("2007-01-31"),3), rep(as.Date("2007-02-28"),3), rep(as.Date("2007-03-31"),3), rep(as.Date("2007-01-31"),3), rep(as.Date("2007-02-28"),3), rep(as.Date("2007-03-31"),3)), value = c(10,50,60,05,90,20,30,46,39,69,82,48,65,99,75,15,49,27))
observation<- data.frame(Dt = c(as.Date("2007-01-31"), as.Date("2007-02-28"), as.Date("2007-03-31")), obs = c(30,49,57))
p <- ggplot(data = forecasts, aes(x = as.factor(Date), y = value))
p <- p + geom_boxplot(aes(fill = f_type))
p <- p + geom_line(data = observation,aes(x = as.factor(Dt), y = obs, group = 1))
print(p)
答案 2 :(得分:2)
ggplot() +
geom_boxplot(data = forecasts,
aes(x = Date, y = value,
group = interaction(Date, f_type),
fill = f_type),
width = 10) +
geom_line(data = observations,
aes(x = Dt, y = obs), size = 2)
这就是你想要的。您需要x
作为连续日期变量(而不是代码中的as.factor
)。这样,它对x轴的期望数据类型在两个数据集中都是相同的。您需要添加group =
行,以便它知道为每个日期和f_type创建一个单独的框。然后添加该行很简单。
如果您不希望x
成为连续日期,那么您使用as.factor
是正确的,但是您需要添加group
到geom_line
所以它知道如何跨离散因子连接点。
ggplot() +
geom_boxplot(data = forecasts,
aes(x = as.factor(Date), y = value,
group = interaction(Date, f_type),
fill = f_type)) +
geom_line(data = observations,
aes(x = as.factor(Dt), y = obs, group = 1), size = 2)
另请注意,我删除了第二个图表中的width
选项(这意味着我只使用默认的ggplot值)。您可以使用该值来查看数据的最佳效果。
最后,在我的两个例子中,我将数据和美学移到了将要使用它们的geom
语句中。在复杂的数字中,有时很难记住哪些层使用哪些数据和哪些美学,因此在您进行调试和故障排除时,最好不要在主ggplot()
调用中使用任何数据。