수업 날짜의 x 축에 수직 geom_vline을 얻는 방법은 무엇입니까?


109

나는에 구글 그룹 해들리의 게시물을 발견에도 불구 POSIXct하고 geom_vline, 나는 그것을 할 수 없었다. 예를 들어 1998 년, 2005 년 및 2010 년의 시계열을 가지고 있으며 수직선을 그리고 싶습니다. ggplotqplot구문으로 시도 했지만 여전히 수직선이 전혀 보이지 않거나 수직선이 맨 처음 수직 그리드에 그려지고 전체 시리즈가 다소 이상하게 오른쪽으로 이동합니다.

gg <- ggplot(data=mydata,aes(y=somevalues,x=datefield,color=category)) +
      layer(geom="line")
gg + geom_vline(xintercept=mydata$datefield[120],linetype=4)
# returns just the time series plot I had before, 
# interestingly the legend contains dotted vertical lines

내 날짜 필드의 형식은 "1993-07-01"이고 클래스 Date입니다.


1
예제를 시도 할 수 있도록 데이터 프레임의 몇 행을 추가 할 수 있습니까?
Sarah West

답변:


141

시도해보십시오 as.numeric(mydata$datefield[120]):

gg + geom_vline(xintercept=as.numeric(mydata$datefield[120]), linetype=4)

간단한 테스트 예 :

library("ggplot2")

tmp <- data.frame(x=rep(seq(as.Date(0, origin="1970-01-01"),
                            length=36, by="1 month"), 2),
                  y=rnorm(72),
                  category=gl(2,36))

p <- ggplot(tmp, aes(x, y, colour=category)) +
     geom_line() +
     geom_vline(xintercept=as.numeric(tmp$x[c(13, 24)]),
                linetype=4, colour="black")
print(p)

geom_vline 예제 플롯


나는 'as.numeric ()'을 실제로 찾기가 매우 어렵다는 것을 알았습니다! 감사.
arno_v

3
궁금 geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])), linetype=4, colour="black")즉, 더 관용적 것 사용 aes대신에 tmp$.
David Arenburg

1
이 솔루션은 더 이상 작동하지 않습니다. 코드에서```오류 : 통계가없는 레이어를 만들려고했습니다. 실행 rlang::last_error()하여 오류가 발생한 위치를 확인하십시오
.``

30

geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)날짜가 120 번째 행에 있는지 여부에 관계없이 줄이 그대로 유지되도록 할 수도 있습니다 .


13
내 컴퓨터에 (Win10는 R 3.2.2 및 ggplot 1.0.1로), 나는 그것이 제대로 정렬 얻을 POSIXct에 날짜를 강제해야한다 : as.POSIXct(as.Date(c("2016-12-01","2017-02-01")))
Jthorpe

감사합니다 Jthorpe .. 이것은 나를 위해 일한 유일한 버전입니다
ColorStatistics

2

as.numeric은 나에게 작동합니다.

ggplot(data=bmelt)+
  geom_line(aes(x=day,y=value,colour=type),size=0.9)+
  scale_color_manual(labels = c("Observed","Counterfactual"),values = c("1","2"))+
  geom_ribbon(data=ita3,aes(x=day, 
      y=expcumresponse, ymin=exp.cr.ll,ymax=exp.cr.uu),alpha=0.2) +
  labs(title="Italy Confirmed cases",
        y ="# Cases ", x = "Date",color="Output")+
  geom_vline(xintercept = as.numeric(ymd("2020-03-13")), linetype="dashed", 
                color = "blue", size=1.5)+
  theme_minimal()

코드 출력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.