我有用季度图例绘制的ts数据:
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,就可以了):

如何将偏移量(“在datapoint X处绘制vline”)或数据("1975-08-01")放入?
我做错了什么?
添加一些数据。
dput(z)结构(n,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.45750000001,59.2175,53.8525,53.4175,50.1475,50.9,50.0675,52.6925、59.9325、59.8625、61.8375、61.8375、50.23、61.8375、c、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.666666667、1974.75、1974.833333333、1974.91666666667、1975年、1975.083333333、1975.16666666667、1975.25、1975.33333333、1975.166666667、1975.25、1975.33333333、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.6.5、1976.583333333、1976.6666667、1976.75、1976.833333333、1976.8333333、1976.91666666667、1977年、1977.083333333、1977.16666666667、1977.25、1977.333333333、1977.41666666667、类=“象形”、频率= 12 (“zooreg”),(“动物园”)
发布于 2017-11-21 19:57:53
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")))发布于 2017-11-21 16:27:58
正如bVa所指出的,我使用dput来查看索引的格式。由于日期存储在十进制中,解决方案是使用简单的十进制值。1975年8月1975.67美元。
geom_vline(xintercept=as.numeric(1975.67))
https://stackoverflow.com/questions/47415142
复制相似问题