2013-03-06 8 views
5

Zaman serileriyle bir data.frame sahibim. İçinde NA da var, ayrıca bir satırın farklı bölümlerini vurgulamak için kullanmak istediğim bir faktör var.R? 'Daki ​​bazı faktörlere göre renklendirilmiş segmentleri ile seyrek (boşluklu) çizgi çizmek nasıl yapılır?

flow.mndnr <- function(id, start, end) { 
    uri <- sprintf("http://maps1.dnr.state.mn.us/cgi-bin/csg.pl?mode=dump_hydro_data_as_csv&site=%s&startdate=%s&enddate=%s", id, start, end) 
    dat <- read.csv(url(uri), colClasses=c(Timestamp="Date")) 
    rng <- range(dat$Timestamp) 
    d <- data.frame(Timestamp=seq(rng[1], rng[2], by='day')) 
    merge(d, dat, all.x=TRUE) 
} 
dat <- flow.mndnr("28062001", as.Date("2002-04-02"), as.Date("2011-10-05")) 

Ben koşulsuz

library(lattice) 
xyplot(Discharge..cfs. ~ Timestamp, dat, type='l', cex=0.5, auto.key=TRUE) 

enter image description here

bunu çizebilirsiniz Ama faktörüne

xyplot(Discharge..cfs. ~ Timestamp, dat, type='l', 
    groups=dat$Discharge..cfs..Quality, cex=0.5, auto.key=TRUE) 

enter image description here

tanıtmak denediğimde bağlantı hatları kurtulmak olamazggplot2

dat$quality <- dat$Discharge..cfs..Quality 
ggplot(dat, aes(x=Timestamp, y=Discharge..cfs.)) + 
    geom_path(aes(colour=quality)) + theme(legend.position='bottom') 

enter image description here

ile

aynı basari geom_line çalıştı. ggplot2 mailing archive'da okudum, geom_path'un yolu bu. Ama benim için pek işe yaramıyor.

P.S. Neden ggplot2 bir isimde noktalara benzemediğinden, başka bir tane kullanmak zorunda kaldım?

+0

+1! çünkü ggplot2 ve kafes denediniz! tekrarlanabilir örnek ve net bir soru. – agstudy

+0

Re: noktalar, düzgün çalışmak için, ggplot argümanlarının adil bir şekilde değerlendirilmesini yapmak zorundadır, bu yüzden orada bir şeyler yanlış gidiyor olabilir. Genel olarak, sütun isimlerinizi temizlemek için iyi bir uygulama olarak düşünülecektir. Örneğin, noktaları kaldırmak için basit bir "gsub". – joran

cevap

2

Sorun gruplandırma ile ilgilidir. Bu atlamaları atlamak için year'u kullanabilirsiniz. Sadece yapın:

dat$grp <- format(dat$Timestamp, "%Y") 
ggplot(dat, aes(x=Timestamp, y=Discharge..cfs.)) + 
    geom_path(aes(colour = quality, group = grp)) + 
    theme(legend.position='bottom') 

Alacağınız:

enter image description here

Düzenleme: detaylı yorumunu cevaplamak için: Sürece gruba hangi değişken bilmiyorum olarak tarafından, yapamazsın doğru şekilde gruplandır. Yıl içinde eksik birkaç ayınız varsa, elbette bu kod atlar üretecektir. Bu durumda, böyle bir şey öneriyorum:

dat$grp <- paste(format(dat$Timestamp, "%Y"), format(dat$Timestamp, "%m")) 
ggplot(dat, aes(x=Timestamp, y=Discharge..cfs.)) + 
    geom_path(aes(colour = quality, group = grp)) + 
    theme(legend.position='bottom') 

Bu:

enter image description here

+0

Bu, sağlam değil. Bu durumda işe yarayabilir. Ancak, bir yıl içinde sensörden hiç veri gelmezse çok yardımcı olmaz. – mlt

+0

Her zaman hangi değişkeni gruplayacağınızı bilmek zorundasınız. Bir yıl içinde büyük bir boşluk varsa, o zaman ay ve yıl ayrı ayrı almak ve bir "grp" olarak yapıştırmanız gerekir. – Arun

+0

@mlt, muhtemelen alternatif (düzenleme), yıl içinde (veya diğer alternatif durumlarda) eksik veriler için bir gruplama değişkeni yaratma hakkında bir fikir verir. – Arun

İlgili konular