5

我有要绘制的数据。我有几个变量,范围从 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. Name1 2. Name2 ... 10. Name10

4

1 回答 1

10

这是一些示例数据来回答您的问题,我添加了该geom_point()功能以便更轻松地查看value数据中的哪些 s:

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"))
于 2013-10-01T17:28:45.283 回答