繁体   English   中英

R ggplot2 geom_smooth 不添加负值

[英]R ggplot2 geom_smooth wihtout adding negative values

假设我们运行install.packages("ggplot2") install.packages("babynames")

然后

library(babynames)
data(babynames)
my_d <- babynames %>%
  filter(
    name == "Josiah"   & sex == "M" |
      name == "Alicia"  & sex == "F" |
      name == "Gabriel"  & sex == "M" |
      name == "Joshua" & sex == "M"
  ) %>%
  group_by(name, year, sex) %>%
  summarise(n = sum(n) ) %>%
  arrange(year)

ggplot(my_d, aes(x = year, y = n, color = name) ) +
  geom_line(se = FALSE) +
  scale_x_continuous(breaks = seq(1900, 2020, by = 10) )

在此处输入图片说明

这很好,但我想“稍微”平滑它,所以我做

ggplot(my_d, aes(x = year, y = n, color = name) ) +
  geom_smooth(se = FALSE) +
  scale_x_continuous(breaks = seq(1900, 2020, by = 10) )

这使在此处输入图片说明

这很顺利,但它为“约书亚”增加了负值。

我怎样才能避免这种“副作用”?

编辑:改变

geom_smooth(se = FALSE)

geom_smooth(se = FALSE, method = "loess") +
  ylim(0, 30000)

删除负值,但“平滑仍然粗糙,可以这么说。它显示“Gabriel”具有增加趋势,但事实并非如此。这是结果

在此处输入图片说明

根据文档span =参数应该使平滑“摆动”。 也许玩弄它会解决你的问题。 下面是一个span = .1的例子。 线条的粗糙边缘消失了,但总体趋势往往保持可见和真实。 根据数据的大小,将span设置得太低可能会导致内存问题。

library(babynames)
library(tidyverse)
data(babynames)
my_d <- babynames %>%
  filter(
    name == "Josiah"   & sex == "M" |
      name == "Alicia"  & sex == "F" |
      name == "Gabriel"  & sex == "M" |
      name == "Joshua" & sex == "M"
  ) %>%
  group_by(name, year, sex) %>%
  summarise( n = sum(n) ) %>%
  arrange( year )

ggplot( my_d, aes(x = year, y = n, color = name) ) +
  geom_smooth(se = FALSE, method = "loess", span = .1) +
  scale_x_continuous( breaks = seq(1900, 2020, by = 10) )

reprex 包(v0.3.0) 于 2020 年 2 月 21 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM