R折线图 - 去除与数据无关的烦恼零线

时间:2014-11-13 23:53:07

标签: r date linechart

我在4月到8月期间在不同地点制作了一个简单(但非常大)的计数数据集。 在4月中旬到7月之间没有零计数 - 但零线从最早到最晚都延伸。

enter image description here

以下是用于制作上述图表的数据部分(列为Site.ID,DATE,Visible Number):

  

data = structure(list(Site.ID = c(302L,302L,302L,302L,302L,302L,   302L,302L,302L,302L,302L,302L,304L,304L,304L,304L,304L,   304L,304L,304L,304L,304L,304L,304L),DATE =结构(c(1L,   2L,5L,3L,4L,6L,8L,7L,9L,10L,11L,12L,1L,2L,5L,3L,   4L,6L,8L,7L,9L,10L,11L,12L),。标签= c(" 3/21/2014"," 3/27/2014",   " 4/17/2014"," 4/28/2014"," 4/8/2014"," 5/13/2014&#34 ;," 6/17/2014",   " 6/6/2014"," 7/10 / 2014"," 7/22/2014"," 7/29/2014&#34 ;," 8/5/2014"   ),class =" factor"),Visible.Number = c(0L,0L,5L,14L,20L,   21L,6L,8L,0L,0L,0L,0L,0L,0L,2L,7L,7L,7L,7L,5L,   0L,0L,0L,0L)),. Name = c(" Site.ID"," DATE"," Visible.Number"   ),class =" data.frame",row.names = c(NA,-24L))

attach(data)
DATE<-as.Date(DATE,"%m/%d/%Y")
plot(data$Visible.Number~DATE, type="l", ylab="Visible Number")

我有两个网站但有三条线。如何让R不沿零线绘制一条线? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

您的问题在于多个站点ID。它绘制第一个,然后返回(画一条线)绘制第二个。基本上,基础图试图绘制所有线而不“抬起笔”。使用基础绘图,您可以选择使用lines单独绘制它们,可能在for循环中。我认为使用ggplot2

这样的事情会更容易
library(ggplot2)
ggplot(data, aes(x = DATE, y = Visible.Number, group = Site.ID)) + geom_line()

# if you prefer more base-like styling
ggplot(data, aes(x = DATE, y = Visible.Number, group = Site.ID)) +
  geom_line() +
  theme_bw()

在基地:

plot(data$DATE, data$Visible.Number, type = "n",
     ylab = "Visible Number", xlab = "Date")

for(site in unique(data$Site.ID)) {
    with(subset(data, Site.ID == site),
         lines(Visible.Number ~ DATE)
    )
}

NB 我做了 attach我的数据,所以我不知道基本解决方案中的子集是否能够正常运行如果你做attach。一般来说,避免attach; with是一种很好的方法,可以在不附加的情况下保存输入,并且不会“冒险”,因为它不会将您的数据列复制到孤立的向量中,从而使它们更难以跟踪您的子集或其他方式处理您的数据。