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

ggplot2将总和添加到图表

  •  1
  • Miksmith  · 技术社区  · 7 年前

    mtcars 例如,我制作了一些小提琴情节。我想在这个图表中添加两件事:

    1. n
    2. 对于每组,求第三个变量的和(例如。 wt )

    n

    非常感谢您的帮助!

    library(ggplot2)
    library(gridExtra)
    library(ggthemes)
    
    result <- mtcars
    
    ggplot(result, aes(x = gear, y = drat, , group=gear)) +
      theme_tufte(base_size = 15) + theme(line=element_blank()) +
      geom_violin(fill = "white") +
      geom_boxplot(fill = "black", alpha = 0.3, width = 0.1) +
      ylab("drat") + 
      xlab("gear") +
      coord_flip()+
      geom_text(stat = "count", aes(label = ..count.., y = ..count..)) 
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   tbradley    7 年前

    您可以通过在绘制图形之前在数据帧中临时创建这两个注释来添加这两个注释。使用 dplyr 包中,您可以创建两个新列,一个包含每个组的计数,另一个包含 wt %>% (或者,您可以保存新数据集,并按现有方式将其插入ggplot)。然后对您的 geom_text

    library(ggplot2)
    library(gridExtra)
    library(ggthemes)
    library(magrittr)
    library(dplyr)
    
    result <- mtcars
    
    result %>%
      group_by(gear) %>%
      mutate(count = n(), sum_wt = sum(wt)) %>%
      ggplot(aes(x = gear, y = drat, , group=gear)) +
        theme_tufte(base_size = 15) + theme(line=element_blank()) +
        geom_violin(fill = "white") +
        geom_boxplot(fill = "black", alpha = 0.3, width = 0.1) +
        ylab("drat") + 
        xlab("gear") +
        coord_flip()+
        geom_text(aes(label = paste0("n = ", count), 
                      x = (gear + 0.25), 
                      y = 4.75)) +
        geom_text(aes(label = paste0("sum wt = ", sum_wt), 
                      x = (gear - 0.25),
                      y = 4.75)) 
    

    新图形如下所示:

    或者,如果创建名为 result_sum ,然后您可以手动将其添加到 geom_文本 电话。

    result <- mtcars %>%
      mutate(gear = factor(as.character(gear)))
    
    result_sum <- result %>%
      group_by(gear) %>%
      summarise(count = n(), sum_wt = sum(wt))
    
    
    ggplot(result, aes(x = gear, y = drat, , group=gear)) +
      theme_tufte(base_size = 15) + 
      theme(line=element_blank()) +
      geom_violin(fill = "white") +
      geom_boxplot(fill = "black", alpha = 0.3, width = 0.1) +
      ylab("drat") + 
      xlab("gear") +
      coord_flip()+
      geom_text(data = result_sum, aes(label = paste0("n = ", count), 
                                       x = (as.numeric(gear) + 0.25), 
                                       y = 4.75)) +
      geom_text(data = result_sum, aes(label = paste0("sum wt = ", sum_wt), 
                                       x = (as.numeric(gear) - 0.25),
                                       y = 4.75))
    

    这将为您提供:

        2
  •  0
  •   Miksmith    7 年前

    感谢那些帮助过我的人…我最后用了这个来绘制计算值,一组类是基于文本的,所以用V4来定位垂直偏移。

    再次感谢!

    library(ggplot2)
    library(gridExtra)
    library(ggthemes)
    
    results <- mtcars
    results$gear <- as.factor(as.character(results$gear)) #Turn 'gear' to text to simulate classes, then factorise
    
    result_sum <- results %>%
      group_by(gear) %>%
      summarise(count = n(), sum_wt = sum(wt))
    
    ggplot(results, aes(x = gear, y = drat, group=gear)) +
      theme_tufte(base_size = 15) + theme(line=element_blank()) +
      geom_violin(fill = "white") +
      geom_boxplot(fill = "black", alpha = 0.3, width = 0.1) +
      ylab("drat") + 
      xlab("gear") +
      coord_flip()+
      geom_text(data = result_sum, aes(label = paste0("n = ", count), x = (gear), vjust= 0, y = 5.25)) +
      geom_text(data = result_sum, aes(label = paste0("sum wt = ", round(sum_wt,0)), x = (gear), vjust= -2, y = 5.25))