2017-06-03 83 views
1

我似乎无法让geom_smooth数据正常工作。R Newb ggplot2问题

示例数据:

## A tibble: 12 x 4 
    UID Month  n tot 
    <dbl> <chr> <int> <dbl> 
1 1001 2016-04  2 75 
2 1001 2016-05  7 500 
3 1001 2016-06  3 1673 
4 1001 2016-07  5 288 
5 1001 2016-08  2 123 
6 1001 2016-09  3 739 
7 1001 2016-10  4 241 
8 1001 2016-12  2 512 
9 1001 2017-01  5 350 
10 1001 2017-02  1 48 
11 1001 2017-03  2 125 
12 1001 2017-04  2 NA 

绘制代码:

ggplot(one, aes(Month, tot)) + geom_point() + geom_smooth() 

你认为它有事情做在日期字段的字符值?

回答

0

有时用线条和平滑器,你必须指定点实际上应该与线接合,这样你就可以添加group = 1,以确保一切都被视为同一组的一部分:

ggplot(one, aes(Month, tot)) + 
    geom_point() + 
    geom_smooth(aes(group=1)) 
0

是的,是防止平滑的Month列的格式。问题是:如何将该列转换为日期?鉴于你只有年和月,但日期需要一天。

有两种选择。你可以使用as.yearmon从动物园包转换为yearmon对象:

library(dplyr) 
one %>% 
    mutate(date = zoo::as.yearmon(Month)) %>% 
    ggplot(aes(date, tot)) + geom_point() + geom_smooth() 

或者你可以假设日期是每个月的第一天,以转换为一个日期:

library(dplyr) 
one %>% 
    mutate(date = as.Date(paste(Month, "01", sep = "-"))) %>% 
    ggplot(aes(date, tot)) + geom_point() + geom_smooth() 

enter image description here