首页 > 解决方案 > 使用注释功能将汇总统计信息添加到图形中:ggplot2

问题描述

我有兴趣为虹膜数据制作类似的图,并在图上生成汇总统计数据: https ://imgur.com/a/GasBB8r

我在这里关注这篇文章:如何使用 ggplot2 在直方图中添加汇总统计信息?

df <- iris
df.m <- melt(df, id="Species")

#Calculating the summary statistics
summ <- df.m %>% 
  group_by(variable) %>% 
  summarize(min = min(value), max = max(value), 
            mean = mean(value), q1= quantile(value, probs = 0.25), 
            median = median(value), q3= quantile(value, probs = 0.75),
            sd = sd(value))

然后我修改了代码以制作密度图而不是直方图:

p1 <- ggplot(df.m) + geom_density(aes(x = value), fill = "grey", color = "black") + 
    facet_wrap(~variable, scales="free", ncol = 2)+ theme_bw()

我这里好像有问题:

p1+geom_density(data=summ,label =split(summ,summ$variable),
npcx = 0.00, npcy = 1, hjust = 0, vjust = 1,size=2)

有谁知道问题是什么?另外,是否可以仅使用 ggplot2 来完成此操作?我正在使用没有管理员权限的计算机来下载许多库(我有 reshape2、dplyr、ggplot2)。这应该使用 ggplot2 中的 annotate() 函数来完成吗?有没有办法将每个图形的 x 轴更改为“log”?

标签: rggplot2plotgraphsummary

解决方案


我会建议下一种方法,因为你只有几个包。您可以将摘要添加为文本注释,但您应该围绕每个组的文本位置进行调整。log()如果您在aes()for中申请,也可以进行转换ggplot()。我将向您展示两种进行注释的方法。

library(ggplot2)
library(dplyr)

#Data
df <- iris
df.m <- melt(df, id="Species")

在这里,我们创建注释:

#Calculating the summary statistics and create the label
summ <- df.m %>% 
  group_by(variable) %>% 
  summarize(min = min(value), max = max(value), 
            mean = mean(value), q1= quantile(value, probs = 0.25), 
            median = median(value), q3= quantile(value, probs = 0.75),
            sd = sd(value)) %>%
  mutate_if(is.numeric, round, digits=2) %>%
  mutate(lab = paste("min = ", min, "\nmax = ", max, "\nmean = ", mean, 
                    "\nq1 = ", q1, "\nmedian = ", median, "\nq3 = ", q3, "\nsd = ", sd),
         position=c(1.5, 0.8, 0.25, -2)) %>% select(variable, lab, position)

如果要定义标签的位置,则必须修改position上一节中确定 x 位置的变量。接下来是使用该图的代码:

#Plot
p1 <- ggplot(df.m) + geom_density(aes(x = log(value)), fill = "grey", color = "black") + 
  facet_wrap(~variable, scales="free", ncol = 2)+ theme_bw()
p1 <- p1 + geom_text(data = summ, aes(x=position, label = lab), y=Inf, hjust=1, vjust=1.2, size=3)
p1

输出:

在此处输入图像描述

注释的 x 位置定义在summ. 如果你想避免它,你只需使用下一个代码:

p1 <- ggplot(df.m) + geom_density(aes(x = log(value)), fill = "grey", color = "black") + 
  facet_wrap(~variable, scales="free", ncol = 2) + theme_bw()
p1 <- p1 + geom_text(data = summ, aes(label = lab), x = Inf, y = Inf, hjust = 1, vjust = 1.2, size = 3)
p1

输出:

在此处输入图像描述

您可以选择这些选项中的任何一个。您应用的功能不起作用的原因可能是由于gridgridExtra包。


推荐阅读