【问题标题】:Combining geom_line(stat='count') with geom_smooth() with a grouping variable将 geom_line(stat='count') 与 geom_smooth() 与分组变量相结合
【发布时间】:2019-10-11 13:28:22
【问题描述】:

我正在尝试将黄土平滑添加到我使用 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))

我想要每个组的平滑线。使用上面的代码我得到错误:因子错误(vs):找不到对象'vs'

【问题讨论】:

    标签: r ggplot2


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2019-06-03
      • 2020-02-05
      • 2021-08-06
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多