我有想要绘制的数据。我有几个变量,范围从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
答案 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"))