आर

2010-12-04 12 views
11

का उपयोग कर टाइम सीरीज़ प्लॉट में लेबल एक्स एक्सिस मैं कुछ हद तक नया हूं और सामान्य रूप से साजिश के साथ सीमित अनुभव है। मैं चिड़ियाघर का उपयोग कर आर में समय श्रृंखला ऑब्जेक्ट के रूप में अपना डेटा प्राप्त करने में सक्षम हूं, लेकिन मुझे मुश्किल है कि एक्सएक्सिस को सही तरीके से लेबल किया जा रहा है, अगर यह सब कुछ है।आर

जब मैं अपने चिड़ियाघर वस्तु साजिश

plot(z) 

x- अक्ष केवल पता चलता एक लेबल, साल 2010 जब श्रृंखला अप्रैल 2009 से अक्टूबर 2010

मैं करने की कोशिश की करने के लिए फैले साप्ताहिक है मेरी श्रृंखला को एक टीएस ऑब्जेक्ट में वापस परिवर्तित करें, और यहां तक ​​कि एक डेटा फ्रेम (केवल एक कॉलम और तिथियां शामिल नहीं है)।

बस, मैं आमतौर पर एक्स-अक्ष लेबल को कैसे नियंत्रित कर सकता हूं, और समय श्रृंखला वस्तुओं के साथ कैसे?

अग्रिम धन्यवाद!

उत्तर

13

एक उदाहरण के साथ प्रारंभ:

x.Date <- as.Date(paste(rep(2003:2004, each = 12), rep(1:12, 2), 1, sep = "-")) 
x <- zoo(rnorm(24), x.Date) 
plot(x) 

हम अलग अलग टिक स्थानों हैं, तो हम साजिश रचने डिफ़ॉल्ट अक्ष को दबाने और हमारे अपने में जोड़ सकते हैं:

plot(x, xaxt = "n") 
axis(1, at = time(x), labels = FALSE) 

या उन्हें गठबंधन:

plot(x) 
axis(1, at = time(x), labels = FALSE) 

आपको टिकों के लिए स्थानों को निर्दिष्ट करने की आवश्यकता है, इसलिए यदि आप मासिक, साप्ताहिक, आदि मूल्य चाहते हैं (obs के बजाय ervations बार ऊपर), आप प्रासंगिक स्थानों (दिनांकों बनाने के लिए) अपने आप की आवश्यकता होगी:

## weekly ticks 
plot(x) 
times <- time(x) 
ticks <- seq(times[1], times[length(times)], by = "weeks") 
axis(1, at = ticks, labels = FALSE, tcl = -0.3) 

अधिक जानकारी के लिए ?axis.Date देखें, प्लस ?plot.zoo बात की इस तरह के उदाहरण के बहुत सारे है।

+1

हाँ। गेविन फिर से करता है। जब मैं निश्चित अंतराल के साथ था, तो द्वारा = "सप्ताह" पैरामीटर का उपयोग करने के आधार पर मेरे समाधान से बेहतर। लेकिन चूंकि मेरे पास लेबल हैं, इसलिए मैं इसे अपरिवर्तित पोस्ट करने जा रहा हूं और ओपी वह जो ले सकता है वह ले सकता है। –

8

अक्ष लेबलिंग मासिक divsions के साथ लाइन नहीं है लेकिन कुछ स्थितियों में उपयोगी हो सकता है। रैंडम डेटा (अभिव्यक्त) पिछले 500 दिनों से अधिक:

xx.Date <- as.Date((Sys.Date()-500):Sys.Date()) 
x <- zoo(cumsum(rnorm(501)), xx.Date) 
tt=time(x) 
plot(x, xaxt ="n") 
tt <- time(x) 
ix <- seq(1, length(tt), by=60) #every 60 days 
fmt <- "%b-%d" # format for axis labels 
labs <- format(tt[ix], fmt) 
axis(side = 1, at = tt[ix], labels = labs, cex.axis = 0.7) 

enter image description here

6

plot.zoo आर क्लासिक ग्राफिक्स में अक्ष कार्यों का उपयोग करता है, लेकिन चिड़ियाघर भी xyplot.zoo के माध्यम से रूप में अच्छी तरह जाली ग्राफिक्स प्रदान करता है। बस xyplot को plot बदलते अपनी आवश्यकताओं के लिए पर्याप्त हो सकता है:

library(zoo) 
library(lattice) 

# create test data 
z <- zooreg(1:83, start = as.Date("2009-04-01"), deltat = 7) 

xyplot(z) 

नोट वहाँ ?plot.zoo और ?xyplot.zoo में और उदाहरण के साथ-साथ तीन विगनेट्स कि चिड़ियाघर के साथ आ रहे हैं। उन स्थानों पर आप एक अलग दृष्टिकोण के उदाहरण भी पा सकते हैं जो क्लासिक ग्राफिक्स के फ़ंक्शन को अत्यधिक अनुकूलित अक्ष के लिए plot.zoo के साथ कैसे उपयोग करें।

1

मैं अपने खुद के संदर्भ के लिए एक ही स्थान पर अतिरिक्त विकल्पों में से सब से ऊपर और एक जोड़ी पर कब्जा कर लिया है,:

# Time series plots with good X axis labels 
library(zoo) 
# data 
today = Sys.Date() 
dates = as.Date((today-500):today) 
z = zoo (100+cumsum(rnorm(501)), dates) 

# method1 : default X axis labels do not look good 
?plot.zoo 
plot(z) 
?plot.ts 
plot(ts(z)) 

# method 2 : Lattice 
library(lattice) 
?xyplot.zoo 
xyplot(z) 
xyplot(z, lwd=2, col="tomato") 

# method 3 : XTS 
library(xts) 
?plot.xts 
plot(as.xts(z)) 
plot(as.xts(z), auto.grid=F, major.format="%b %y", las=2) 

# method 4 : Base graph 
timeline = time(z) 
summary(timeline) 
index = seq(from=1, to=length(timeline), 90) # put ticks every 90 days 
plot(z, xaxt="n") 
axis(side=1, at=timeline[index], label=format(timeline[index], "%b %y"), cex.axis=0.8) 

# method 5 : ggplot 
library(ggplot2) 
library(scales) 
?date_breaks 
df = data.frame(date=as.POSIXct(time(z)), value=as.numeric(z)) 
head(df) 
# default plot 
ggplot(df, aes(x=date, y=value)) + geom_line() 
# formatted 
ggplot(df, aes(x=date, y=value)) + geom_line() + 
    scale_x_datetime(labels=date_format("%b '%y")) 
# custom breaks 
ggplot(df, aes(x=date, y=value)) + geom_line() + 
    scale_x_datetime(labels=date_format("%b '%y"), breaks=date_breaks("3 months")) 
0

अगर समय दिनांक स्वरूप में है, यह सहायक हो सकता है।

ggplot(data_frame, aes(date,column)) + geom_point() + 
    ggtitle("my title")+ 
    scale_x_date(date_breaks = "1 month",date_labels = "%b") + xlab("month") + 
    ylab("y_axis title")