2012-01-21 10 views
14

मैं ggplot का उपयोग करके प्रत्येक कैलेंडर वर्ष के लिए एक समय श्रृंखला में परिवर्तन को साजिश करने का प्रयास कर रहा हूं और मुझे एक्स-अक्ष के ठीक नियंत्रण में समस्याएं आ रही हैं। अगर मैं scale="free_x" का उपयोग नहीं करते तो मैं एक x- अक्ष के साथ ही प्रश्न में वर्ष है कि कई वर्षों से पता चलता अंत, इस तरह:आर ggplot और facet ग्रिड: x-axis breaks को नियंत्रित करने के लिए कैसे करें

Facet grid plot with common x-axis

अगर मैं scale="free_x" प्रयोग करते हैं तो के रूप में एक मैं उम्मीद करेंगे प्रत्येक भूखंड के लिए टिक लेबल के साथ खत्म हो, और कहा कि कुछ मामलों में, भूखंड के हिसाब से बदलती है जो मैं नहीं करना चाहता:

Facet grid plot with free x-axis

मैं scale_x_date आदि, लेकिन किसी भी बिना का उपयोग कर x- अक्ष को परिभाषित करने के लिए विभिन्न प्रयास किए हैं सफलता। मेरा सवाल इसलिए है:

प्रश्न: मैं xg axis ब्रेक और लेबल को ggplot facet ग्रिड पर कैसे नियंत्रित कर सकता हूं ताकि (टाइम श्रृंखला) x-axis प्रत्येक पहलू के समान हो, केवल तभी दिखाया जा सके पैनल और महीनों के रूप में 1, 2, 3 इत्यादि या 'जन', 'फरवरी', 'मार्च' के रूप में स्वरूपित है?

कोड इस प्रकार है:

require(lubridate) 
require(ggplot2) 
require(plyr) 

# generate data 
df <- data.frame(date=seq(as.Date("2009/1/1"), by="day", length.out=1115),price=runif(1115, min=100, max=200)) 
# remove weekend days 
df <- df[!(weekdays(as.Date(df$date)) %in% c('Saturday','Sunday')),] 
# add some columns for later 
df$year <- as.numeric(format(as.Date(df$date), format="%Y")) 
df$month <- as.numeric(format(as.Date(df$date), format="%m")) 
df$day <- as.numeric(format(as.Date(df$date), format="%d")) 

# calculate change in price since the start of the calendar year 
df <- ddply(df, .(year), transform, pctchg = ((price/price[1])-1)) 

p <- ggplot(df, aes(date, pctchg)) + 
    geom_line(aes(group = 1, colour = pctchg),size=0.75) + 
    facet_wrap(~ year, ncol = 2,scale="free_x") + 
    scale_y_continuous(formatter = "percent") + 
    opts(legend.position = "none") 

print(p) 

उत्तर

10

यहाँ एक उदाहरण है:

df <- transform(df, doy = as.Date(paste(2000, month, day, sep="/"))) 

p <- ggplot(df, aes(doy, pctchg)) + 
geom_line(aes(group = 1, colour = pctchg),size=0.75) + 
facet_wrap(~ year, ncol = 2) + 
scale_x_date(format = "%b") + 
scale_y_continuous(formatter = "percent") + 
opts(legend.position = "none") 
p 

enter image description here

आप इस करना चाहते हैं?

चाल एक ही डमी वर्ष के वर्ष दिन उत्पन्न करने के लिए है।

UPDATED

यहाँ (अर्थात, ggplot2 0,9)

p <- ggplot(df, aes(doy, pctchg)) + 
    geom_line(aes(group = 1, colour = pctchg), size=0.75) + 
    facet_wrap(~ year, ncol = 2) + 
    scale_x_date(label = date_format("%b"), breaks = seq(min(df$doy), max(df$doy), "month")) + 
    scale_y_continuous(label = percent_format()) + 
    opts(legend.position = "none") 
p 

enter image description here

+1

Sasu गा kohske देव संस्करण के लिए एक उदाहरण है। जब आप इसके बारे में सोचते हैं तो सरल और तार्किक और यह मेरे डेटा के साथ बहुत अच्छी तरह से काम करता है। क्या मैं यह भी पूछ सकता हूं कि क्या कोई है (ब्रेक और लेबल्स को जनवरी से दिसंबर तक जाकर अपने स्क्रीनशॉट में जनवरी से जनवरी तक जाने के बजाय सीधा तरीका है? मैं जनवरी से जनवरी के साथ रह सकता हूं, बस सोच रहा हूं कि क्या कोई है कामकाज। धन्यवाद दान – SlowLearner

+0

अरिगाटौ गोज़ैमासु। यह वर्तमान संस्करण में शायद आसान नहीं है। – kohske

+0

समझा जाता है, मैं इसे स्वीकार करूँगा क्योंकि यह प्रशंसा के साथ है। – SlowLearner

संबंधित मुद्दे