Вы можете использовать следующий код:
Ваши данные:
Data <- read.table(header = TRUE,
text = "Name V1
M1 50
M2 10
M1 30
M1 45
M2 5
M2 7")
Код
library(vioplot)
library(dplyr)
## calculate the mean per group
DataMean <- Data %>%
group_by(Name) %>%
summarize(mean = mean(V1))
## your plotting code
with(Data, vioplot(V1[Name=="M1"], V1[Name=="M2"], names=c("M1", "M2"),
plotCentre="line", rectCol="white", col="gray", ylab="",
ylim=c(0,80)))
title(ylab="A($m)", xlab="Name", main="AA")
## use base r 'text' to add the calculated means
## at position 1 and 2 on the X-axis, and
## at height of the Y-axis of 60 (2 times)
text(x = c(1, 2), y = c(60,60), labels = round(DataMean$mean, 2))
, что дает следующий график:
![enter image description here](https://i.stack.imgur.com/98qPI.png)
Конечно, мы можем поиграть с позицией текста.Если мы хотим, чтобы средства отображались на графиках скрипки, мы используем средние значения в качестве Y-координат и меняем цвет, чтобы сделать его более заметным (и смещаем X-координаты немного вправо в сочетании с более светлым серым цветом).).
### playing with position and color
with(Data, vioplot(V1[Name=="M1"], V1[Name=="M2"], names=c("M1", "M2"),
plotCentre="line", rectCol="white", col="lightgray", ylab="",
ylim=c(0,80)))
title(ylab="A($m)", xlab="Name", main="AA")
text(x = c(1.1, 2.1), y = DataMean$mean, labels = round(DataMean$mean, 2), col = "blue")
получая этот участок:
![enter image description here](https://i.stack.imgur.com/UTz0D.png)
Пожалуйста, дайте мне знать, хотите ли вы этого.