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

bil*_*999 3 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()
Run Code Online (Sandbox Code Playgroud)

或者在变量名称(Name1,...,Name10)前面添加数字到图例.例如,1.Name1 2. Name2 ... 10. Name10

Mar*_*sen 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
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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

# POINTS ARE NOT CONNECTED #
ggplot(dat2, aes(Year, value, colour=Name)) + 
     geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)

最后,回答您的上一个问题,这是您如何更改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"))
Run Code Online (Sandbox Code Playgroud)