2010-12-04 14 views
11

Ben R için biraz yeni ve genel olarak çizim ile sınırlı deneyimim var. Verilerimi, hayvanat bahçesini kullanarak R'de bir zaman serisi nesnesi olarak alabildim, ancak xaxis'in doğru şekilde etiketlenmesini sağlamak için zor bir zaman geçiriyorum. Etiket X Ekseni Zaman Serileri Çizelgede R

benim hayvanat bahçesi nesne çizmek

plot(z) 

x ekseni yalnızca gösterir bir etiket, yıl 2010. serisi Nisan 2009-Ekim 2010. denedim

için yayılan haftalık olduğunda serilerimi bir ts nesnesine, hatta bir veri çerçevesine (sadece bir sütun ve tarihleri ​​içermez) dönüştür.

Basitçe, x ekseni etiketlerini ve zaman serisi nesneleriyle nasıl kontrol edebilirim?

Şimdiden teşekkürler! bir örnekle

cevap

13

Başlangıç: Biz farklı kene yerleri istiyorsanız

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

, biz komplo varsayılan eksenini bastırmak ve kendi ekleyebilirsiniz:

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

Veya bunları birleştirmek:

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

Kene için yerleri belirtmeniz gerekir, böylece aylık, haftalık, vb.

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

fazla ayrıntı için ?axis.Date Bkz artı ?plot.zoo şey bu tür örnekleri bol: ervations kere yukarıda), sen) kendini alakalı yerler (tarih oluşturmak gerekecektir.

+1

Yep. Gavin yine yapıyor. Sabit aralıklarla sahip olduğumda by = "hafta" parametresini kullanmam sayesinde çözümümden daha iyi. Ancak benimki etiketlere sahip olduğumdan, bunu değişmeden yayınlayacağım ve OP istediğini alabiliyor. –

8

Eksen etiketlemesi aylık bölümlerle bile hizalanmaz, ancak bazı durumlarda yararlı olabilir. Son 500 gün içinde Rastgele verileri (toplanmasını):

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 R'ın klasik grafik eksen işlevlerini kullanır ama hayvanat bahçesi de xyplot.zoo aracılığıyla yanı kafes grafik sunar. Sadece xyplot için plot değişen ihtiyaçlarınız için yeterli olabilir: Daha ?plot.zoo ve ?xyplot.zoo örnekler yanı sıra hayvanat bahçesi ile gelen üç vinyet olduğunu

library(zoo) 
library(lattice) 

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

xyplot(z) 

Not. Bu yerlerde, klasik grafiklerin axis işlevini, son derece özelleştirilmiş eksenler için plot.zoo ile birlikte nasıl kullanacağını gösteren farklı bir yaklaşımın örneklerini bulabilirsiniz.

1

Ben kendi referans için, tek bir yerde ekstra seçenekler her şeyden ve birkaç yakaladığınız: Zaman Tarih formatında

# 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

, bu yararlı olabilir.

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