2011-07-10 17 views
9

में scale_x_date के लिए तोड़ता है मैं ggplot2 (आर में) में मूल्य ~ दिनांक प्लॉट कर रहा हूं। मेरे पास निम्न कोड है। जैसा कि आप देखते हैं कि ggplot2 मेरे डेटा में एक्स-अक्ष पर अधिक ब्रेक जोड़ता है। मैं अपने डेटा फ्रेम में डेटा पॉइंट होने पर हर बार एक्स-लेबल रखना चाहता हूं। मैं ggplot2 को केवल my.dates के मानों पर केवल ब्रेक दिखाने के लिए कैसे मजबूर कर सकता हूं? ऐसा लगता है scale_x_dateggplot2 और r

require(ggplot2) 
my.dates = as.Date(c("2011-07-22","2011-07-23", 
        "2011-07-24","2011-07-28","2011-07-29")) 
my.vals = c(5,6,8,7,3) 
my.data <- data.frame(date =my.dates, vals = my.vals) 
plot(my.dates, my.vals) 
p <- ggplot(data = my.data, aes(date,vals))+ geom_line(size = 1.5) 
p <- p + scale_x_date(format="%m/%d", ' ') 
p 
के लिए कोई "ब्रेक" तर्क है

enter image description here

उत्तर

14

एक दृष्टिकोण संख्यात्मक रूप में x- अक्ष का इलाज और अंतराल सेट करने में हो सकता है और scale_x_continuous() साथ सौंदर्यशास्त्र लेबल होगा।

ggplot(my.data, aes(as.numeric(date), vals)) + 
    geom_line(size = 1.5) + 
    scale_x_continuous(breaks = as.numeric(my.data$date) 
        , labels = format(my.data$date, format = "%m/%d")) 

हालांकि 7/24 से 7/28 के बीच का ब्रेक मेरी राय में थोड़ा अजीब लग रहा है। हालांकि, मुझे लगता है कि आप यही चाहते हैं? अगर मैंने गलत व्याख्या की है तो मुझे बताएं।

संपादित

जैसा कि ऊपर बताया, मैं नहीं जिस तरह से टूट जाता है ऊपर देखा के साथ रोमांचित विशेष रूप से पृष्ठभूमि में ग्रे ग्रिड के साथ किया गया था। आयताकार ग्रिड को बनाए रखने और केवल उन बिंदुओं को लेबल करने का एक तरीका है जहां हमारे पास डेटा है। आप ggplot कॉल के भीतर यह सब कर सकते हैं, लेकिन मुझे लगता है कि ggplot के बाहर प्रसंस्करण करना आसान है। सबसे पहले, एक वेक्टर बनाएं जिसमें तिथियों के अनुरूप संख्याओं का क्रम शामिल हो। फिर हम उचित लेबल को अद्यतन करने और " " साथ एनए प्रविष्टियों से बदल देंगे उन प्रविष्टियों के लिए एक्स-अक्ष पर प्लॉट किए जाने से कुछ भी रोकने के लिए:

breaks labels 
1 15177 07/22 
2 15178 07/23 
3 15179 07/24 
4 15180  
5 15181  
6 15182  
7 15183 07/28 
8 15184 07/29 
:

xscale <- data.frame(breaks = seq(min(as.numeric(my.data$date)), max(as.numeric(my.data$date))) 
         , labels = NA) 

xscale$labels[xscale$breaks %in% as.numeric(my.data$date)] <- format(my.data$date, format = "%m/%d") 
xscale$labels[is.na(xscale$labels)] <- " " 

यह हमें कुछ है कि तरह लग रहा है देता है

जो तब इस तरह पैमाने के लिए पारित किया जा सकता है:

scale_x_continuous(breaks = xscale$breaks, labels = xscale$labels)

+0

धन्यवाद एक बहुत। पहले भाग में मेरी समस्या हल हो गई। क्या आप किसी भी मौके से जानते हैं कि मैं एक्स-अक्ष ब्रेक कैसे रख सकता हूं लेकिन इसकी ग्रिडलाइन हटा सकता हूं? – Mark

+2

@ मार्क - 'opts (panel.grid.major = theme_blank(), panel.grid.minor = theme_blank())' चाल चलाना चाहिए। – Chase

+1

'ggplot2 1.0.0' में 'त्रुटि: निरंतर पैमाने पर प्रदान किए गए असतत मूल्य' को फेंकता है। – MYaseen208