Как добавить значение среднего числа в скрипке, используя базу R - PullRequest
0 голосов
/ 27 мая 2019

У меня есть данные

Name    V1
M1      50 
M2      10 
M1      30
M1      45
M2      5
M2      7

С моим кодом я смог создать violin plot. Но я не знаю, как поместить значение среднего значения в каждом сюжете скрипки в число, используя base R (не ggplot)?

Вот пример моего кода.

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

Большое спасибо

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете использовать следующий код:

Ваши данные:

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

Конечно, мы можем поиграть с позицией текста.Если мы хотим, чтобы средства отображались на графиках скрипки, мы используем средние значения в качестве 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

Пожалуйста, дайте мне знать, хотите ли вы этого.

...