如何向 ggplot + geom_point 图添加均值

Jea*_*n_N 4 r ggplot2

我有 10 组数据点,我正在尝试为要在绘图上显示的每个组添加平均值(例如,通过不同的符号,如大三角形或星形或类似的东西)。这是一个可重现的例子

library(ggplot2)
library(reshape2)
set.seed(1234)

x <- matrix(rnorm(100),10,10)
varnames <- paste("var", seq(1,10))

df <- data.frame(x)
colnames(df) <- varnames
melt(df)

ggplot(data = melt(df)) + geom_point(mapping = aes(x = variable, y = value))
mymeans <- colMeans(df)
Run Code Online (Sandbox Code Playgroud)

基本上我现在想mymeans在各自的变量位置绘制值,有人知道如何快速做到这一点吗?

mar*_*kus 14

或者我们可以使用 stat_summary

ggplot(data = reshape2::melt(df), aes(x = variable, y = value)) + 
  geom_point() +
  stat_summary(
    geom = "point",
    fun.y = "mean",
    col = "black",
    size = 3,
    shape = 24,
    fill = "red"
  )
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


可以在此处找到有关可能形状的概述:www.cookbook-r.com


Vin*_*mme 3

您可以geom_point通过另一个传递另一个data.frame

请尝试以下操作:

df_means <- melt(summarise_all(df, mean))
ggplot(data = melt(df)) + 
    geom_point(mapping = aes(x = variable, y = value)) + 
    geom_point(data=df_means,  mapping=aes(x = variable, y = value), col="red")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我知道你在找什么?


顺便说一句,更紧凑/现代/整洁的方式是:

library(tidyverse)
set.seed(1234)

df <- replicate(10, rnorm(10)) %>% as_data_frame() %>% gather()
df_means <- df %>% group_by(key) %>% summarise(value=mean(value))

ggplot(data = df) + 
   aes(x = key, y = value) +
   geom_point() + 
   geom_point(data=df_means, col="red")
Run Code Online (Sandbox Code Playgroud)