ggplot2将sum添加到图表中

时间:2017-09-09 21:40:39

标签: r ggplot2 geom-text

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

  1. 对于每个组,列出n
  2. 对于每个组,总和第三个变量(例如wt
  3. 我可以使用下面的geom_text代码执行(1),尽管(n)实际上是在x轴上绘制而不是在侧面。

    但我无法解决如何做(2)。

    非常感谢任何帮助!

    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 个答案:

答案 0 :(得分:1)

您可以通过在绘图之前暂时在数据框中创建这些注释来添加这两个注释。使用dplyr包,您可以创建两个新列,一个包含每个组的计数,另一个包含每个组的wt总和。然后可以使用%>%将其直接传送到您的ggplot中(或者,您可以保存新数据集并将其以您拥有的方式插入到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_text调用中。

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))

这给你这个:

第二种方法的好处是文本不像第一张图中那样粗体。由于文本被打印在数据框中的所有观察上,因此在第一个图形中出现粗体效果。

答案 1 :(得分:0)

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

再次感谢!

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))