簡體   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