Я бы с удовольствием разместил буквы, представляющие результаты HSD Тьюки, на ящиках, которые я делаю в ggplot. Мне известны другие сообщения ( Tukeys post-hoc на ggplot boxplot , Результаты Tukey на boxplot в R )
но в моем случае я работаю с facet_grid, и я не уверен, что делать дальше. Поскольку я создаю много коробочных сюжетов, я бы хотел, чтобы что-то было автоматизировано. Буду очень признателен за любые советы, которые помогут мне начать. Большое спасибо
library(multcompView)
library(ggplot2)
#sample dataframe
df <- data.frame(var_facet=c('facet1', 'facet1', 'facet1', 'facet1', 'facet1',
'facet1', 'facet1', 'facet1', 'facet1', 'facet1',
'facet2', 'facet2', 'facet2', 'facet2', 'facet2',
'facet2', 'facet2', 'facet2', 'facet2', 'facet2'),
class_x=c("Q1", "Q1", "Q1", "Q2", "Q2", "Q2", "Q3", "Q3", "Q3", "Q3",
"Q1", "Q1", "Q1", "Q2", "Q2", "Q2", "Q3", "Q3", "Q3", "Q3"),
value_y=c(12, 21, 35, 42, 56, 1, 4, 3, 4, 5, 2, 2, 2,
2, 2, 4, 4, 4, 4, 4))
#function
generate_label_df <- function(TUKEY, variable){
# Extract labels and factor levels from Tukey post-hoc
Tukey.levels <- variable[,4]
Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'])
#I need to put the labels in the same order as in the boxplot :
Tukey.labels$treatment=rownames(Tukey.labels)
Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
return(Tukey.labels)
}
model=lm(value_y~class_x, data=df)
ANOVA=aov(model)
TUKEY <- TukeyHSD(ANOVA)
plot(TUKEY , las=1 , col="brown" )
labels <- generate_label_df(TUKEY , TUKEY$`class_x`)#generate labels using function
names(labels) <- c('Letters','class_x')#rename columns for merging
yvalue <- aggregate(.~class_x, data=df, mean)# obtain letter position for y axis using means
final <- merge(labels,yvalue) #merge dataframes
#ggplot with facet_grid
p <- ggplot(data=df, aes(class_x , value_y, fill=class_x))+
geom_boxplot(outlier.shape = NA) +
facet_grid(~var_facet)
p <- p + scale_y_continuous(limits = quantile(df$value_y, c(0.1, 0.9), na.rm=T))
p <- p + theme_minimal()
p <- p + scale_fill_brewer(palette="Greens")
p <- p + theme(legend.position="none")
p <- p + theme(axis.text.x=element_text(angle=45, hjust=1))
p <- p + geom_text(data = final,
aes(x = class_x, y = value_y, label = Letters),
vjust=-3.5,hjust=-.5)
p