我有季度传奇绘制的数据:
z <- as.zoo(my_data)
breaks <- seq(min(time(z)), max(time(z)), .25);
autoplot(z, geom="line",ylim=c(0,75)) + scale_x_yearqtr(breaks = breaks, format = "%yQ%q")
我想在预定的位置画一条垂直线(比如1975-08-01)。
问题是,然后我添加“+ geom_vline”,我得到一个非常奇怪的折叠图表。显然,我不知道我在做什么,但我已经尝试过了:
+ geom_vline(xintercept=as.Date("1975-08-01"))
+ geom_vline(xintercept=as.numeric(as.Date("1975-08-01")))
和作为抵消(不确定它是怎么回事):
+ geom_vline(xintercept=as.numeric(z[c(10,11)]))
+ geom_vline(xintercept=as.numeric(z[10]))
+ geom_vline(xintercept=3)
这就是发生的事情(没有geom_vline就可以了):
如何设置偏移量(“在数据点X处绘制vline”)或数据(“1975-08-01”)?
我做错了什么?
添加一些数据。
dput(z)的 结构(c(NA,NA,NA,56.0775,58.53,58.17,61.5025,57.71, 56.5075,53.9375,47.345,48.6975,53.15,60.3125,60.2,65.1025, 63.445,57.86,62.1225,62.19,64.075,71.7725,69.565,63.4575000000001, 59.2175,53.8525,53.4175,50.1475,50.9,50.0675,52.6925,59.9325, 59.8625,61.8375,57.655,50.23,47.8775,39.5475,40.1375,43.2075, 44.885,48.115),指数=结构(c(1974,1974.08333333333, 1974.16666666667,1974.25,1974.33333333333,1974.41666666667, 1974.5,1974.58333333333,1974.66666666667,1974.75,1974.83333333333, 1974.91666666667,1975,1975.08333333333,1975.16666666667,1975.25, 1975.33333333333,1975.41666666667,1975.5,1975.58333333333, 1975.66666666667,1975.75,1975.83333333333,1975.91666666667, 1976,1976.08333333333,1976.16666666667,1976.25,1976.33333333333, 1976.41666666667,1976.5,1976.58333333333,1976.66666666667, 1976.75,1976.83333333333,1976.91666666667,1977,1977.08333333333, 1977.16666666667,1977.25,1977.33333333333,1977.41666666667 ),class =“yearmon”),frequency = 12,class = c(“zooreg”,“zoo”))
答案 0 :(得分:1)
z
的索引类具有类“”yearmon“
class(index(z))
## [1] "yearmon"
所以xintercept=
应该一致地指定,也就是"yearmon"
对象:
p <- autoplot(z, ylim=c(0,75)) +
scale_x_yearqtr(breaks = breaks, format = "%yQ%q")
p + geom_vline(xintercept = as.yearmon("1975-08"))
"yearmon"
对象的任何其他有效规范也可以使用,例如
p + geom_vline(xintercept = as.yearmon(1975 + (8-1) / 12))
p + geom_vline(xintercept = as.yearmon(as.Date("1975-08-01")))
答案 1 :(得分:0)
正如bVa指出的那样,我使用dput来查看索引的格式。 由于日期以十进制形式存储,因此解决方案是使用简单的十进制值。 1975年至1975年的1975.67。
geom_vline(xintercept = as.numeric(1975.67))