我正在尝试在使用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'
答案 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)
但是,您会注意到颜色不匹配,因为变量不匹配。我怀疑最干净的方法是在新数据框中提前获取计数,然后在绘图中使用该计数。
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)