R - ggplot2 - geom_line - 删除缺失值的直线

时间:2013-09-29 04:02:55

标签: r ggplot2

我有想要绘制的数据。我有几个变量,范围从1880年至2012年。我每年有一次观察。但有时一个变量几年没有观察。例如,它可能有1880年至1888年的观察,但不是1889年至1955年,然后是1956年至2012年。我希望ggplot2 + geom_line在失踪年份(1889-1955)没有任何东西。但它将1888年和1956年的直线相连。我有什么办法可以删除这一行吗?我正在使用ggplot函数。

无关的问题,但有没有办法让ggplot不按字母顺序在图例中对变量名进行排序?我有这样的代码:

ggplot(dataFrame, aes(Year, value, colour=Name)) + geom_line()

或者将变量名称(Name1,...,Name10)前面的数字添加到图例中。例如, 1.姓名1 2.姓名2 ... 10.姓名10

1 个答案:

答案 0 :(得分:8)

以下是一些回答您问题的示例数据,我添加了geom_point()函数,以便更轻松地查看数据中的value

library(ggplot2)
seed(1234)
dat <- data.frame(Year=rep(2000:2013,5),
            value=rep(1:5,each=14)+rnorm(5*14,0,.5),
            Name=rep(c("Name1","End","First","Name2","Name 3"),each=14))
dat2 <- dat
dat2$value[sample.int(5*14,12)]=NA

dat3可能是您的数据的示例,只是我将Year视为整数。

dat3 <- dat2[!is.na(dat2$value),]

# POINTS ARE CONNECTED WITH NO DATA IN BETWEEN #
ggplot(dat3, aes(Year, value, colour=Name)) + 
     geom_line() + geom_point()

但是,如果您在数据中添加缺少列并将该值设置为NA的年份,那么当您绘制数据时,您将获得差距。

# POINTS ARE NOT CONNECTED #
ggplot(dat2, aes(Year, value, colour=Name)) + 
     geom_line() + geom_point()

最后,回答您的上一个问题,这是您如何更改图例中Name的顺序和标签:

# CHANGE THE ORDER AND LABELS IN THE LEGEND #
ggplot(dat2, aes(Year, value, colour=Name)) + 
     geom_line() + geom_point() + 
     scale_colour_discrete(labels=c("Beginning","Name 1","Name 2","Name 3","End"),
                             breaks=c("First","Name1","Name2","Name 3","End"))