首页 > 解决方案 > 特定值后的 R geom_ribbon

问题描述

我试图找到一种在特定值之后为背景着色的方法。

在此示例中,我想为值后面的空格着色5(此处显示为垂直线)。

#

library(lme4)
library(tidyverse)
data("sleepstudy")

#
sleepstudy = sleepstudy %>% mutate(days = ifelse(Days > 5, 1, 0))
#

m1 = sleepstudy %>% group_by(Days, days) %>% summarise(m = mean(Reaction)) 
m1

m1 %>% ggplot(aes(Days, m)) + 
  geom_point() + 
  geom_vline(xintercept = 6) + 
  theme_minimal()

在此处输入图像描述

我想实现这样的目标

在此处输入图像描述

但是,当我使用以下行时,我收到一条错误消息。

m1 %>% ggplot(aes(Days, m)) + 
  geom_point() + 
  geom_vline(xintercept = 6) + 
  theme_minimal() + 
  geom_ribbon(data = m1, aes(x = c(6,9), ymin=0, ymax = 400), fill = 'khaki', alpha = 0.2) 

标签: rggplot2

解决方案


也许以下内容可以满足问题的要求。

首先,如果要绘制误差线,则必须更改数据准备代码。

  1. 无需计算额外的变量days来判断Days是否大于6
  2. 必须计算标准误差。

这只能在一个管道中完成。

library(lme4)
library(tidyverse)
data("sleepstudy")

m1 <- sleepstudy %>% 
  group_by(Days) %>% 
  summarise(m = mean(Reaction),
            s = sd(Reaction)) 

现在剧情。

  1. 我改变了几何图形的顺序,在功能区上有点、误差线和垂直线
  2. 我也把alpha等级提高到了0.30
  3. 审美没必要重置x,剧情一开始就设置好了。

正是后一点导致了代码错误。

错误:美学长度必须为 1 或与数据 (10) 相同:x

m1 %>% ggplot(aes(Days, m)) + 
  theme_minimal() + 
  geom_ribbon(data = m1 %>% filter(Days > 5), 
              aes(ymin = 0, ymax = 400), 
              fill = 'khaki', 
              alpha = 0.30) +
  geom_vline(xintercept = 6) + 
  geom_point() +
  geom_errorbar(aes(ymin = m - s, ymax = m + s))

在此处输入图像描述


推荐阅读