Я борюсь со следующим кодом, используя набор данных iris.Я хотел бы нарисовать сюжет скрипки, включающий только виды сетоз, и сделать несколько сложных перекрывающихся комбинаций для подгрупп данных.
В частности, на оси х я хотел бы сначала разделить непрерывные данные Sepal.Length.на группы: группа A = Sepal.Длина <4.7, группа B = Sepal.Длина 4.7 - 5, группа C = Sepal.Длина 5 - 5.2 и группа D = Sepal.Length> 5.2.
Затем IХотелось бы построить четыре скрипки / коробки на оси X, одиночные / перекрывающиеся группы: «B», «A + C», «D», «A + C + D».Ось Y - это просто "Petal.Length".
Я также включаю код для отображения размера выборки (n) для каждой скрипки.
Буду признателен за любые предложения.Спасибо.
library(dplyr)
library(ggplot2)
library(ggpubr)
# Define order of violins on x-axis.
order <- c("B", "AC", "D", "ACD")
# Function to display sample size (n) for each violin.
give.n <- function(x){return(c(y = min(Petal.Length), label = length(x)))}
iris %>%
filter(Species == "setosa") %>%
mutate(sub_a = case_when( Sepal.Length < 4.7~"A",
Sepal.Length < 5~ "B",
Sepal.Length < 5.2~ "C",
TRUE~"D")) %>%
mutate(collapsed = c((ifelse(sub_a %in% c("A", "C"), "AC", sub_a)), (ifelse(sub_a %in% c("AC", "D"), "ACD", sub_a)))) %>%
ggviolin(iris[iris$Species == "setosa", ], x=collapsed, y=Petal.Length) + scale_x_discrete(limits=order) + stat_summary(fun.data = give.n, geom = "text")
Редактировать
Ожидаемый результат приведен ниже.Обратите внимание, что цифры под каждой скрипкой являются точными.Остальная часть изображения - только пример ожидаемого результата.