Làm cách nào để chuyển geom_vline dọc đến trục x của ngày lớp?


109

Mặc dù tôi đã tìm thấy bài đăng của Hadley trong nhóm google trên POSIXctgeom_vline, tôi vẫn không thể hoàn thành. Tôi có một chuỗi thời gian từ và muốn vẽ một đường thẳng đứng cho các năm 1998, 2005 và 2010 chẳng hạn. Tôi đã thử với ggplotqplotcú pháp, nhưng tôi vẫn không thấy đường thẳng đứng nào cả hoặc đường thẳng đứng được vẽ ở lưới dọc đầu tiên và toàn bộ chuỗi được chuyển sang bên phải một cách hơi kỳ lạ.

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

Trường ngày tháng của tôi có định dạng "1993-07-01" và thuộc loại đẳng cấp Date.


1
Bạn có thể thêm một vài hàng trong khung dữ liệu của mình để chúng tôi có thể thử ví dụ của bạn không?
Sarah West

Câu trả lời:


141

Thử as.numeric(mydata$datefield[120]) :

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

Một ví dụ kiểm tra đơn giản:

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)

âm mưu ví dụ geom_vline


Tôi thấy 'as.numeric ()' thực sự khá khó tìm! Cảm ơn.
arno_v

3
Tôi tự hỏi nếu geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])), linetype=4, colour="black")sẽ là thành ngữ hơn, tức là, sử dụng aesthay vì tmp$.
David Arenburg

1
Giải pháp này không còn hoạt động. Mã tạo ra `` Lỗi: Đã cố gắng tạo lớp không có chỉ số. Chạy rlang::last_error()để xem lỗi xảy ra ở đâu. ''
CoderGuy123

30

Bạn cũng có thể làm geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)nếu bạn muốn dòng giữ nguyên vị trí cho dù ngày của bạn có ở hàng thứ 120 hay không.


13
trên máy tính của tôi (Win10 với R 3.2.2 và 1.0.1 ggplot), tôi phải ép buộc ngày để POSIXct để làm cho nó sắp xếp đúng cách: as.POSIXct(as.Date(c("2016-12-01","2017-02-01")))
Jthorpe

Cảm ơn Jthorpe .. đây là phiên bản duy nhất phù hợp với tôi
ColorSt Statistics

2

as.numeric phù hợp với tôi

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()

đầu ra mã

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.