Home Articles

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

Asked
Viewed 190 times
3

我有我试图绘制的数据 . 我有几个变量,范围从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

1 Answer

  • 8

    这里's some sample data to answer your questions, I' ve添加了 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"))
    

Related