在带有hline/vline geom的stat_summary中使用computed after_stat(x/y)作为截距时,出现意外的多行

9wbgstp7  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(112)

这是一种特殊的行为,在Create geom_vline中半间接地提到了密度图中的平均值,数据框中的新变量,而不创建新表。
图1:当使用计算后的after_stat(y)作为带有hline几何体的stat_summary中的yintercept,并且没有显式传递x美学,那么这将返回与数据没有任何明显关系的多行(对我来说不明显)。
情节2:当硬编码一个x(或y)美学时,这个问题奇迹般地解决了。但是它击败了整个练习的重点,因为我们想以编程方式定义截距,而不依赖于任何硬编码值。
我的问题是:为什么会这样
我不太关心“如何解决这个问题”。(我的解决方案是简单地创建我自己的stat,但如果你有什么可以使用stat_summary解决这个问题,我仍然很想听到)。

library(ggplot2)
library(patchwork) ## just for reprex
## Multiple lines
p1 <- ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  stat_summary(aes(yintercept = after_stat(y)), fun = mean, geom = "hline") +
  labs(title = "Plot 1", caption = "Multiple lines -\ncorrespond to what exactly?")

## It works with a hard coded x
p2 <- ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  stat_summary(aes(x = 1, yintercept = after_stat(y)), fun = mean, geom = "hline") +
  labs(title = "Plot 2", caption = "A hard coded x removes those")

p1 + p2

创建于2023-04-13带有reprex v2.0.2
P.S.我在尝试回答How can I pass variables between ggplot personal functions?时遇到了这个问题

pkln4tw6

pkln4tw61#

我们从stat_summary得到的均值和hline对应于Map到y上的变量的均值Map到x上的变量的(唯一)值。这可以通过手动计算平均值来查看。在我意识到我想出了简单修复x的方法之后(或y,取决于orientation),因此我们只有一个x值,因此得到y的期望总平均值。

library(ggplot2)
library(patchwork)
library(dplyr)

base <- ggplot(mpg, aes(displ, hwy)) +
  geom_point()

p1 <- base + stat_summary(aes(yintercept = after_stat(y), color = after_stat(factor(x))), fun = mean, geom = "hline") +
  labs(title = "Plot 1", caption = "Multiple lines -\ncorrespond to what exactly?", color = NULL)

means <- mpg |> 
  group_by(displ) |> 
  summarise(hwy = mean(hwy))

p3 <- base +
  geom_hline(data = means, aes(yintercept = hwy, color = factor(displ))) +
  labs(title = "... the multiple lines correspond to\nthe mean of y per unique x", color = NULL)

p1 + p3 +
  plot_layout(guides = "collect")

相关问题