簡體   English   中英

用ggplot2在線條之間的陰影區域

[英]Shade area between lines with ggplot2

我想遮蔽分組線之間的區域。 我嘗試了不同的方法,但我無法做到。

df <- data.frame(year = rep(c(1950:1955), each = 2),
                 gender = factor(rep(c("male", "female"), times = 6)),
                 value = c(40526812, 37450509, 43027405,
                            40135682, 45801088, 43130369,
                            48579427, 46077640, 50948574,
                            48493786, 53052094, 50537984))

df |> 
  ggplot(aes(year, value, group = gender)) +
  geom_line()

在此處輸入圖像描述

提前致謝!

您可以使用geom_ribon它允許對軸值內的區域進行着色。
更強的 alpha 將在着色器強度上發揮作用。

  ggplot(data=df, aes(year, value, group = gender)) +
  geom_line() + 
  geom_ribbon(data=subset(df, 1950 <= year & year <= 1955), 
              aes(ymin=rep(subset(df, gender=='female')$value, each=2), 
                  ymax=rep(subset(df, gender=='male')$value, each=2)), fill="blue", alpha=0.5)

在此處輸入圖像描述

您可以通過使用pivot_wider geom_ribbon創建區域的ymaxymin來定義區域的邊界,這樣您就不需要對每個參數進行子集化。 所以它會更容易重現。 這里有一個例子:

df <- data.frame(year = rep(c(1950:1955), each = 2),
                 gender = factor(rep(c("male", "female"), times = 6)),
                 value = c(40526812, 37450509, 43027405,
                           40135682, 45801088, 43130369,
                           48579427, 46077640, 50948574,
                           48493786, 53052094, 50537984))

library(ggplot2)
library(dplyr)
library(tidyr)
area <- df %>%
  pivot_wider(names_from = gender, values_from = value) %>%
  mutate(
    ymax = pmax(male, female),
    ymin = pmin(male, female)
  )

ggplot(data = df, mapping = aes(year, y = value, group = gender)) +
  geom_line() +
  geom_ribbon(data = area, mapping = aes(year, ymin = ymin, ymax = ymax), alpha = 0.4, inherit.aes = FALSE ) 

reprex 包於 2022-07-22 創建 (v2.0.1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM