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