Mam data.frame
z szeregów czasowych. Są tam również NA
s, a także istnieje czynnik, który chciałbym wykorzystać do wyróżnienia różnych segmentów linii.Jak narysować linię rzadką (z przerwami) z segmentami pokolorowanymi według pewnego współczynnika w 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"))
mogę wykreślić ją bezwarunkowo
library(lattice)
xyplot(Discharge..cfs. ~ Timestamp, dat, type='l', cex=0.5, auto.key=TRUE)
Ale nie mogę pozbyć się linie łączące się przy próbie wprowadzenia czynnika
xyplot(Discharge..cfs. ~ Timestamp, dat, type='l',
groups=dat$Discharge..cfs..Quality, cex=0.5, auto.key=TRUE)
samo z ggplot2
dat$quality <- dat$Discharge..cfs..Quality
ggplot(dat, aes(x=Timestamp, y=Discharge..cfs.)) +
geom_path(aes(colour=quality)) + theme(legend.position='bottom')
Próbowałem geom_line
bez powodzenia. Przeczytałem w ggplot2 mailing archive, że droga do pracy to geom_path
. Ale nie działa to dla mnie.
P.S. Dlaczego ggplot2 nie lubi kropek w nazwie, więc musiałem użyć innego?
+1! ponieważ wypróbowałeś ggplot2 i kratę! powtarzalny przykład i jasne pytanie. – agstudy
Re: kropki, aby działać poprawnie, ggplot musi zrobić sporo fantazyjnej oceny swoich argumentów, więc coś prawdopodobnie pójdzie nie tak. Ogólnie rzecz biorąc, dobrą praktyką byłoby czyszczenie nazw kolumn. Prosty "gsub" do usuwania kropek, na przykład. – joran