कक्षा की तारीख के एक्स-अक्ष पर एक ऊर्ध्वाधर geom_vline कैसे प्राप्त करें?


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
क्या आप अपने डेटाफ़्रेम की कुछ पंक्तियाँ जोड़ सकते हैं, ताकि हम आपके उदाहरण की कोशिश कर सकें?
सारा वेस्ट

जवाबों:


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$
डेविड ऐरनबर्ग

1
यह समाधान अब काम नहीं करता है। कोड `` त्रुटि उत्पन्न करता है: बिना स्टेट के लेयर बनाने का प्रयास किया गया। भागो rlang::last_error()देखने के लिए जहां त्रुटि occurred.`` '
CoderGuy123

30

आप यह भी कर सकते हैं geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)कि आप चाहते हैं कि लाइन 120 वीं पंक्ति में है या नहीं।


13
मेरी मशीन पर (R 3.2.2 के साथ Win10 और ggplot 1.0.1), मुझे इसे ठीक से संरेखित करने के लिए POSIXct को दिनांक देने के लिए बाध्य करना होगा: as.POSIXct(as.Date(c("2016-12-01","2017-02-01")))
Jthorpe

शुक्रिया जर्थोरपे .. यह एकमात्र संस्करण है जिसने मेरे लिए काम किया
कलरस्टैटिस्टिक्स

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

कोड आउटपुट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.