因子转换后回归线丢失

时间:2017-02-15 07:15:36

标签: r ggplot2

在下图中,time位于x轴上,但每年都没有显示刻度线:

ggplot(mm, aes(x = time, y = value)) + 
    geom_point(aes(color = variable)) + 
    geom_line(stat = "smooth", method = "lm", alpha = 0.5) + 
    facet_grid(variable ~ ., scales = "free_y") + 
    theme(legend.position="none") + 
    coord_fixed(ratio = 10)

enter image description here

为了解决这个问题,我已将time变量转换为一个因子,该因子有效,但线性回归消失了:

ggplot(mm, aes(x = factor(time), y = value)) + 
    geom_point(aes(color = variable)) + 
    geom_line(stat = "smooth", method = "lm", alpha = 0.5) + 
    facet_grid(variable ~ ., scales = "free_y") + 
    theme(legend.position = "none") + 
    coord_fixed(ratio = 10)

enter image description here

geom_line是否有解决方法?

1 个答案:

答案 0 :(得分:0)

我认为scale_x_date正是您所寻找的。

首先,一些可重复的数据:

df <-
  data.frame(
    y = 99:117
    , x = seq(as.Date("1999-01-01")
              , as.Date("2017-01-01")
              , "year")
  )

然后,这就是你可以设置一些&#34;漂亮&#34;在每年仍然得到一个滴答的同时打破积分。如果您希望每年都贴上标签,请使用date_breaks = "1 year"代替我现在拥有的breaksdate_minor_breaks个参数

ggplot(df, aes(x = x, y = y) ) +
  geom_smooth(method = "lm") +
  geom_point() +
  scale_x_date(breaks = pretty(df$x)
               , date_minor_breaks = "1 year"
               , date_labels = "%Y")

给出

enter image description here

或者,如果您的年份只是数字(而非日期),您可以使用scale_x_continuous获得类似效果:

df <-
  data.frame(
    y = 99:117
    , x = 1999:2017
  )

ggplot(df, aes(x = x, y = y) ) +
  geom_smooth(method = "lm") +
  geom_point() +
  scale_x_continuous(breaks = pretty(df$x)
                     , minor_breaks = unique(df$x)) +
  theme_gray()

给出了与上面无法区分的情节。