如何在我的条形图中叠加单个数据点

How to overlay individual data points in my barplot

我想分别在条形图的每个条形图中打印单个数据点。其中每个条是该类别的平均值

我想要这个输出:

我从 excel sheet

导入的数据集看起来像这样
#  A  B  C  D  E
1  3  3  2  2  2
2  NA 2 NA  3  1
3  1  3  3  1  1
library(readxl)
library(ggplot2)
Book1 <- read_excel("C:/Users/helix/Desktop/Book1.xlsx")

x_row = names(Book1)
y_val = colMeans(Book1, na.rm = TRUE)
sd_val = sapply(Book1, sd, na.rm = TRUE)
df = data.frame(x_name = x_row, mean=y_val, sd = sd_val)

ggplot(df, aes(x= x_row, y = y_val )) + 
  geom_bar(stat = 'identity')+
  geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.2)

您可以将 Book1 数据集添加到 ggplot 命令,方法是先旋转它,然后使用 geom_point:

Book1 <- pivot_longer(Book1, cols = everything())

ggplot() + 
  geom_bar(aes(x= x_row, y = y_val), df, stat = 'identity') +
  geom_errorbar(aes(x = x_row, ymin=mean-sd, ymax=mean+sd), df, width=.2) +
  geom_point(aes(x = name, y = value, color = name), Book1, size = 5)

数据

df <- read.table(header = T, text = "id  A  B  C  D  E
1  3  3  2  2  2
2  NA 2 NA  3  1
3  1  3  3  1  1")
Book1 <- df[,-1]
x_row = names(Book1)
y_val = colMeans(Book1, na.rm = TRUE)
sd_val = sapply(Book1, sd, na.rm = TRUE)
df = data.frame(x_name = x_row, mean=y_val, sd = sd_val)
[![library(tidyverse)
Book1<- data.frame(A= c(3, NA, 1),
                B= c(3,2, 3),
                C= c(2, NA, 3),
                D= c(2, 3, 1),
                E= c(2, 1, 1)
                ) 

x_row = names(Book1)
y_val = colMeans(Book1, na.rm = TRUE)
sd_val = sapply(Book1, sd, na.rm = TRUE)
df = data.frame(x_name = x_row, mean=y_val, sd = sd_val)

round(df$mean, digits = 2)-> df$mean


ggplot(df, aes(x= x_row, y = y_val,fill = x_row )) + 
 geom_bar(stat = 'identity')+
 geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.2)+
 geom_text(aes(label = mean), vjust = -0.4, hjust= -0.2)][1]][1]