[英]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.