Как добавить значение среднего числа в график скрипки, используя базу R

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

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

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

Добро пожаловать в СО. Перед публикацией вопроса прочтите: Как задать хороший вопрос.

KoenV 27.05.2019 14:08

Привет Спасибо за ваше предложение. Я уже отредактировал, чтобы было понятно. Надеюсь, что сейчас все в порядке?

Lara 28.05.2019 07:02

Я обновил свой ответ версией, в которой средства появляются внутри скрипичных сюжетов. Пожалуйста, посмотрите.

KoenV 29.05.2019 07:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
929
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Ваши данные:

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

получается следующий сюжет:

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

что дает этот сюжет:

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

именно то, что я хочу. Большое спасибо

Lara 30.05.2019 06:22

С удовольствием, рад, что смог помочь.

KoenV 30.05.2019 06:51

Другие вопросы по теме