如何用geom_rect填充ggplot中geom_line图下方的区域?

问题描述 投票:0回答:3

这是我的情节:

library(ggplot2)
economics <- economics %>% mutate(year = year(economics$date))

ggplot(economics,aes(year, unemploy))+
  geom_line() +
  geom_rect(aes(xmin = 1970,xmax = 1975,
                     ymin = 0, ymax = unemploy))

我想填充 1970 年至 1975 年线图下方的区域。但它不起作用。

我做错了什么?

r ggplot2
3个回答
2
投票

问题是,在

ymax
中,我们使用整列“失业”,它应该是该年份范围内“失业”的
max

library(ggplot2)
library(dplyr)
library(lubridate)
economics %>%
    mutate(year = year(date)) %>% 
    ggplot(aes(year, unemploy)) + 
        geom_line() +
   geom_rect(aes(xmin = 1970,xmax = 1975,
                      ymin = 0,
        ymax = max(.data[['unemploy']][between(.data[['year']], 1970, 1975)]))) + 
    theme_bw()

2
投票

您可以选择对您有意义的

ymax
。例如我设置
ymax = 4800
:

library(ggplot2)
ggplot(economics,aes(year, unemploy))+
        geom_rect(aes(xmin = 1970,xmax = 1975,
                      ymin = 0, ymax = 4800), fill = "lightblue", alpha = .5) +
        geom_line()


0
投票

这更接近您想要的吗?接受的答案似乎不符合“填充线图下方的区域”的要求。

library(tidyverse)

economics |>
  mutate(year = year(date)) |>
  ggplot(aes(x = date, y = unemploy)) + 
  geom_line() +
  geom_ribbon(mapping = aes(ymax = if_else(between(year, 1970, 1975),
                                           unemploy, NA),
                            ymin = 0),
                            fill = "lightblue", alpha = 0.5)

创建于 2024-04-05,使用 reprex v2.1.0

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