如何根据R中的某些因素绘制稀疏(带间隙)线及其色段的颜色?

时间:2013-03-06 21:42:47

标签: r ggplot2 lattice

我有data.frame时间序列。其中还有NA个,我想用它来突出显示一行的不同部分。

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

我可以无条件地绘制它

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

enter image description here

但是当我尝试引入因子

时,我无法摆脱连接线
xyplot(Discharge..cfs. ~ Timestamp, dat, type='l',
    groups=dat$Discharge..cfs..Quality, cex=0.5, auto.key=TRUE)

enter image description here

与ggplot2相同

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

我尝试geom_line但没有成功。我在ggplot2 mailing archive中读到geom_path是要走的路。但它对我来说并不适用。

P.S。为什么ggplot2不喜欢名字中的点,所以我不得不使用另一个?

1 个答案:

答案 0 :(得分:2)

问题在于分组。您可以使用year跳过这些跳转。只是做:

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

你得到:

enter image description here

编辑:详细回答评论:只要您不知道要分组的变量,就无法正确分组。如果你在一年内有几个月失踪,当然这个代码会产生跳跃。在这种情况下,我建议做这样的事情:

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

你明白了:

enter image description here