【问题标题】:Plotting means on histograms created with facet_wrap在使用 facet_wrap 创建的直方图上绘制均值
【发布时间】:2018-11-02 09:24:33
【问题描述】:

我正在使用ggplot2facet_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))

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

【问题讨论】:

  • 你真的想要它在顶部吗?您可以使用 ...+geom_point(data = df_mean, aes(x = mean, y = 0), col="red") 之类的东西使用不同的颜色放置在 x 轴上。
  • @AntoniosK 是的,我真的想要上榜。 :) 那里有很多空间,所以在其他数据之上绘制要干净得多。

标签: r ggplot2 histogram facet-wrap


【解决方案1】:

如果您可以使用geom_text/label(),您可以使用vjust 参数来执行此操作:

ggplot(df) + 
    geom_histogram(aes(n)) + 
    facet_wrap(~ID) +
    geom_text(data = df_mean, aes(x = mean, y = Inf),
              label = "Mean", vjust = 1)

我一直使用它来计算面板顶部的浮动百分比变化或 p 值,您无需计算任何内容,ggplot 已为您提供。

【讨论】:

  • 我采用了这个解决方案,使用label = "\U2022" 来产生一个点。
【解决方案2】:
# 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)))

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多