我想要一个时间序列图,在某个时间点插入一条垂直线。我的数据从 1990 年 1 月开始。当我使用 ggplot2 时,垂直线被推到范围之外,而不是在所需的点。

下面的代码将显示发生了什么,但在随机生成的数据上。
任何帮助表示赞赏!

library(ggplot2)
library(zoo)
library(reshape)
library(epitools)

##Generate Price Variables
NormalPrices = as.data.frame(matrix(rnorm(300*3, mean=50, sd=10), ncol=3))

rownames(NormalPrices) = paste("sample", 1:300, sep="")

colnames(NormalPrices) = paste("Price", 1:3, sep="")


##Assign as Time Series Data
datt=ts(NormalPrices,start=c(1990,1), frequency=12)

View(datt)

time1=time(datt)

time1=as.month(time1)

time1=time1$dates

datt=melt(data.frame(time1, datt),id.vars="time1")

## Plot
P=ggplot((datt), aes(time1, value)) + geom_line() +facet_grid(variable ~ .)+ ggtitle("Level Prices")


P + geom_vline(xintercept =  2001-04-01,colour="black", linetype = "longdash")+ theme_bw()+ theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
    panel.background = element_blank(), axis.line = element_line(colour = "black"))

r - ggplot2 垂直线未插入所需位置-LMLPHP

最佳答案

问题是,您的日期( "2001-04-01" )未正确转换。您可以调试这样的问题,例如使用

> class("2001-04-01")
[1] "character"

这与 data.frame (即 Date )中的类不匹配
>str(datt)
'data.frame':   900 obs. of  3 variables:
 $ time1   : Date, format: "1990-01-01" "1990-02-01" "1990-03-01" "1990-04-01" ...
 $ variable: Factor w/ 3 levels "Price1","Price2",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  52.1 46 46.3 50.7 64.6 ...

首先尝试将 character -Array 转换为日期:
date <- as.Date("2001-04-01", format="%Y-%m-%d")
gg <- ggplot((datt), aes(time1, value)) + geom_line() + facet_grid(variable ~ .)+ ggtitle("Level Prices")
gg + geom_vline(xintercept = as.numeric(date), linetype=4) + theme_bw()+ theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
    panel.background = element_blank(), axis.line = element_line(colour = "black"))

结果是:

r - ggplot2 垂直线未插入所需位置-LMLPHP

关于r - ggplot2 垂直线未插入所需位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34290564/

10-12 16:29