วิธีรับ geom_vline แนวตั้งไปยังแกน x ของวันที่ของชั้นเรียน


109

แม้ว่าฉันจะพบการโพสต์ของนายอำเภอในกลุ่ม Google บนPOSIXctและgeom_vlineฉันไม่สามารถได้รับมันกระทำ ฉันมีอนุกรมเวลาและต้องการวาดเส้นแนวตั้งสำหรับปี 1998, 2005 และ 2010 เป็นต้น ฉันลองใช้ggplotและqplotไวยากรณ์แล้ว แต่ฉันก็ยังไม่เห็นเส้นแนวตั้งเลยหรือเส้นแนวตั้งถูกวาดที่เส้นตารางแนวตั้งแรกและทั้งชุดจะเลื่อนไปทางขวาค่อนข้างแปลก

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()เพื่อดูว่าเกิดข้อผิดพลาดที่ไหน `` '
CoderGuy123

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.