【问题标题】:R - ggplot2 - geom_line - Get rid of straight line for missing valuesR - ggplot2 - geom_line - 去除缺失值的直线
【发布时间】:2013-09-29 04:02:55
【问题描述】:

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

【问题讨论】:

标签: r ggplot2


【解决方案1】:

这里有一些示例数据来回答你的问题,我添加了geom_point() 函数以便更容易地查看数据中的values:

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"))

【讨论】:

  • 太棒了。我很感激。
猜你喜欢
  • 2017-11-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多