将geom_line(stat ='count')与geom_smooth()与分组变量组合

时间:2019-05-25 02:18:56

标签: r ggplot2

我正在尝试在使用geom_line(stat ='count')创建的ggplot中将黄土平滑处理添加到我的分组线图中。

这是一个类似的问题,但是答案不适用于分组变量: Combining stat_bin with stat_smooth

p = ggplot(mtcars, aes(x=cyl, colour=factor(vs))) + 
  geom_line(stat = 'count') 

dat <- layer_data(p)
p + stat_smooth(data = dat, aes(x, y))

我希望为每个组添加一条平滑线。使用上面的代码,我得到了错误:factor(vs)中的错误:找不到对象'vs'

1 个答案:

答案 0 :(得分:1)

默认情况下,stat_smooth从原始情节(在这种情况下为colour)继承未指定的美学。但是colour指的是vs,它不是新dat数据帧中的变量,因此是错误。尽管您需要做的就是告诉它新的分组变量是什么,在这种情况下为colour。请注意,我还要添加method="lm", se=FALSE,因为此处没有足够的数据点可用于默认平滑。

p <- ggplot(mtcars, aes(x=cyl, colour=factor(vs))) + 
  geom_line(stat = 'count') 
dat <- layer_data(p)
p + stat_smooth(data = dat, aes(x, y, colour=colour), 
                method="lm", se=FALSE)

enter image description here

但是,您会注意到颜色不匹配,因为变量不匹配。我怀疑最干净的方法是在新数据框中提前获取计数,然后在绘图中使用该计数。

library(tidyverse)
mtcars %>% mutate_at(vars(cyl, vs), factor) %>%
  group_by(cyl, vs) %>% summarize(n=n()) %>%
ggplot() + aes(x=cyl, y=n, colour=vs, group=vs) +
  geom_line() +
  stat_smooth(method="lm", se=FALSE)

enter image description here