我正在处理一个数据框架,其中包含每个人在不同日期进行的中心明智销售。示例数据可以生成如下
library(tidyverse)
tibble(
centre = rep(c('A', 'B'), 4),
person = c('p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8')
) %>%
full_join(
tibble(date = seq(as.Date('2022-01-01'), as.Date('2022-01-5'), 1)),
by = character()
) %>%
mutate(
num = round(runif(nrow(.), min = 50, max = 100),0)
) ->
df
我正在尝试绘制不同人的销售与日期的趋势,如下所示
library(ggplot2)
df %>%
group_by(centre, person) %>%
mutate(mean_num = mean(num, na.rm = TRUE)) %>%
ungroup() %>%
ggplot(aes(x = date, y = num)) +
geom_point() +
geom_line() +
facet_wrap(~person, scales = 'free') +
xlab('Date') +
ylab('Sales') +
ggtitle('Sales vs Date') ->
plt
我想在每个方面加上该方面的平均值(即每个人的销售额的平均值)。我试过三种方法,但似乎都不起作用。方法3从下面的链接添加平均线到ggplot?
# Method 1
plt +
geom_hline(yintercept = mean(num), linetype = 'dotted', colour = 'red')
# Method 2
plt +
geom_hline(yintercept = mean_num, linetype = 'dotted', colour = 'red')
# Method 3
plt +
stat_summary(fun = mean, geom = 'line', colour = 'red')
我可以为手段做一个单独的数据框架,然后用它来绘图,但想在一个管道中做。我做错了什么吗?
您需要将yintercept
作为美学映射传递:
plt +
geom_hline(aes(yintercept = mean_num), linetype = 'dotted', colour = 'red')
当前拥有的代码正在全局环境中查找mean_num
的单个值。通过将aes(yintercept = mean_num)
传递给geom_hline
的mapping
参数,您可以向ggplot明确表示您希望使用df
中的变量并将其分别映射到每个facet。