这是一种特殊的行为,在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?时遇到了这个问题
1条答案
按热度按时间pkln4tw61#
我们从
stat_summary
得到的均值和hline
对应于Map到y
上的变量的均值Map到x
上的变量的(唯一)值。这可以通过手动计算平均值来查看。在我意识到我想出了简单修复x
的方法之后(或y
,取决于orientation
),因此我们只有一个x
值,因此得到y
的期望总平均值。