gpt4 book ai didi

r - 在使用 facet_wrap 创建的直方图上绘制均值

转载 作者:行者123 更新时间:2023-12-04 14:38:37 27 4
gpt4 key购买 nike

我正在使用 ggplot2 制作几个直方图和 facet_wrap并想在每个面板上绘制平均值。下面,我创建了一个虚拟数据框,找到每个方面的平均值,然后使用 geom_point 创建添加平均值的图。 .

# Load libraries 
library(tidyverse)

# Toy data frame
df <- data.frame(ID = sample(letters[1:3], 100, replace = TRUE), n = runif(100))

# Mean value of each group
df_mean <- df %>% group_by(ID) %>% summarise(mean = mean(n))

# Plot histograms
ggplot(df) +
geom_histogram(aes(n)) +
facet_wrap(~ID) +
geom_point(data = df_mean, aes(x = mean, y = Inf))

enter image description here

我用过 y = Inf将点放在每个面的顶部,但是 - 正如您所看到的 - 它被裁剪了一些。我想向下轻推它,使其完全可见。据我所知, geom_point没有 nudge_yvadj参数和 0.7 * Inf显然是无稽之谈。我也尝试添加 position = position_nudge(y = -5)作为 geom_point 的参数,但这似乎没有任何影响。作为一种解决方法,我什至尝试使用 geom_text并指定 nudge_y ,但是 – 就像 position_nudge解决方案——它没有任何明显的效果。在绘图时是否有一种简单的方法可以做到这一点,或者我只需要计算 y绘图前的值?

最佳答案

# Load libraries 
library(tidyverse)

# Toy data frame
df <- data.frame(ID = sample(letters[1:3], 100, replace = TRUE), n = runif(100))

# Mean value of each group
df_mean <- df %>% group_by(ID) %>% summarise(mean = mean(n))

# Get max count using the dataframe that stores ggplot info
ggplot(df) +
geom_histogram(aes(n)) +
facet_wrap(~ID) -> p

# Plot histograms and plot mean in the right place
p + geom_point(data = df_mean, aes(x = mean, y = max(ggplot_build(p)$data[[1]]$count)))

enter image description here

这里的关键是要知道最大计数值,因为这将是直方图的顶部 y 轴值。您可以使用 ggplot_build 获取该信息函数并使用它在正确的位置绘制您的点。

当然,如果点落在其中一根柱上,您可以比最大计数高一点,就像这样 y = 0.2 + max(ggplot_build(p)$data[[1]]$count))

关于r - 在使用 facet_wrap 创建的直方图上绘制均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50487503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com