代码之家  ›  专栏  ›  技术社区  ›  Dan

利用面包络绘制柱状图的方法

  •  5
  • Dan  · 技术社区  · 6 年前

    我正在用 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 将点放在每个面的顶部,但如您所见,它被裁剪了一些。我想把它往下推,使它完全可见。据我所知, 风水点 没有 nudge_y vadj 论点和 0.7 * Inf 显然是胡说八道。我也试着补充 position = position_nudge(y = -5) 作为一个论点 风水点 但这似乎没有任何效果。作为解决方法,我甚至尝试使用 geom_text 并说明 轻推 但是“就像 position_nudge 溶液“它没有任何明显的效果。有没有一种简单的方法可以在绘图的同时进行,或者我只需要计算 y 绘图前的值?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Nate xin ding    6 年前

    如果您可以使用 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)
    

    enter image description here

    我一直用它来表示面板顶部的浮动百分比变化或p值,你不需要计算任何东西, ggplot 找到你了。

        2
  •  2
  •   AntoniosK    6 年前
    # 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))