我正在尝试ggplot2在x轴上的日期中添加零线到刻面图.问题是我也在添加多边形以表示某些时间跨度,所以我必须将单独data.frames的分开传递给分离geoms,这会产生一些困难.
以下是连续x轴的示例:
ggplot()+
geom_rect(data=data.frame(from=c(1,3),to=c(2,4)),aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=c(1,2,3,4,5,6),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Run Code Online (Sandbox Code Playgroud)
如果我尝试添加一条水平线,geom_hline我得到一个错误:Error in if (empty(data)) { : missing value where TRUE/FALSE needed我采取的是因为geom_vline需要继承基线中提供的信息ggplot.但是,如上所述,我必须单独提供data.frames以创建点和阴影多边形.
如果x轴是连续的,可以通过使用geom_line和设置值来解决这个问题Inf:
ggplot()+
geom_line(data=data.frame(x=c(-Inf,Inf),y=0),aes(x=x,y=y),col="grey50",lwd=1)+
geom_rect(data=data.frame(from=c(1,3),to=c(2,4)),aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=c(1,2,3,4,5,6),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Run Code Online (Sandbox Code Playgroud)
但是如果我将x轴切换到日期,那么我就无法使用水平线geom_hline(出于与上述相同的原因):
dates=c("2001-01-1","2002-01-01","2003-01-01","2004-01-01","2005-01-01","2006-01-01")
ggplot()+
geom_hline(aes(yintercept=0))+
geom_rect(data=data.frame(from=c(as.Date("2001-01-1"),as.Date("2003-01-01")),
to=c(as.Date("2002-01-1"),as.Date("2004-01-01"))),
aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=as.Date(dates),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Run Code Online (Sandbox Code Playgroud)
类似地,使用geom_line上述方法会产生错误:Error: Discrete value supplied to continuous scale因为x轴不再是连续的.
我可以指定geom_line日期的端点:
ggplot()+
geom_line(data=data.frame(x=c(as.Date("2001-01-01"),as.Date("2006-01-01")),y=0),aes(x=x,y=y),col="grey50",lwd=1)+
geom_rect(data=data.frame(from=c(as.Date("2001-01-1"),as.Date("2003-01-01")),
to=c(as.Date("2002-01-1"),as.Date("2004-01-01"))),
aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=as.Date(dates),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Run Code Online (Sandbox Code Playgroud)
但现在这条线并没有延长情节的长度!
如何geom_vline使用可以在x轴和刻面上使用日期的东西来重现类似输出?
你的问题实际上是完全不同的,也很容易修复.
由于价值yintercept在你hline是不相关的数据,但用户指定的值,这不应该形成的部分aes().
相反,规范很简单:
geom_hline(yintercept=0) +
Run Code Online (Sandbox Code Playgroud)
试试这个:
dates=c("2001-01-1","2002-01-01","2003-01-01","2004-01-01","2005-01-01","2006-01-01")
ggplot()+
geom_rect(data=data.frame(from=c(as.Date("2001-01-1"),as.Date("2003-01-01")),
to=c(as.Date("2002-01-1"),as.Date("2004-01-01"))),
aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1) +
geom_point(data=data.frame(x=as.Date(dates),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),
aes(x=x,y=y)) +
geom_hline(yintercept=0) +
facet_grid(type~.)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |