R ggplot2 geom_smooth不添加负值

问题描述 投票:1回答:1

假设我们跑了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) )

给予

enter image description here

很好,但是我想“稍微”使它平滑,所以我愿意

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

enter image description here

这很平滑,但是为“约书亚”添加了负值。

如何避免这种“副作用”?

编辑:更改

geom_smooth(se = FALSE)

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

除去负值,但“平滑度”仍然很粗糙,也可以说。它显示“ Gabriel”具有增加的趋势,但不是。结果是

enter image description here

r ggplot2 smoothing
1个回答
0
投票

span =参数应根据documentation进行平滑“ wigglier”。也许解决这个问题将解决您的问题。以下是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) )

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9yYU5oVWV2LnBuZyJ9” alt =“”>

reprex package(v0.3.0)在2020-02-21创建

© www.soinside.com 2019 - 2024. All rights reserved.