Estou usando emmeans::cld()
para gerar letras de grupos de significância após uma ANOVA e quero exibi-las acima de um boxplot ggplot2. Quando defino alpha = 0.05
, funciona bem, mas quando quero usar delta = 2
, as letras ficam desalinhadas: embora meu conjunto de dados principal e a tabela de resumo tenham os mesmos níveis de fator na mesma ordem, as letras não ficam alinhadas corretamente com as categorias do eixo x.
Tentei position = position_identity()
e garanti a levels()
correspondência em ambos os quadros de dados. Mas os rótulos de texto ainda aparecem deslocados. Aqui está um exemplo reproduzível completo — alguém pode me ajudar a entender o que estou perdendo?
# Load necessary libraries
library(tidyverse)
library(emmeans)
library(multcomp)
# Step 1: Simulated dataset
set.seed(123)
# Define levels of the treatment variable
treatment_levels <- c("Control_0",
"Carvone_0.001", "Carvone_0.01",
"Eucalyptol_0.001", "Eucalyptol_0.01",
"Mint_nanah_0.001", "Mint_nanah_0.01",
"Mint_piperita_0.001", "Mint_piperita_0.01",
"Mint_pouliot_0.001", "Mint_pouliot_0.01",
"Menthone_0.001", "Menthone_0.01",
"Pulegone_0.001", "Pulegone_0.01")
# Simulate a dataset
Microbio_2025 <- tibble(
Treatment = rep(treatment_levels, each = 6),
Corrected_Surface = rnorm(6 * length(treatment_levels), mean = 20, sd = 5)
)
Microbio_2025 <- Microbio_2025 %>%
mutate(Treatment = factor(Treatment, levels = treatment_levels))
# Step 2: Simple ANOVA model
anova_microbio <- aov(Corrected_Surface ~ Treatment, data = Microbio_2025)
# Step 3: Grouping letters using emmeans
grouped_means <- emmeans(anova_microbio, specs = ~ Treatment) %>%
cld(delta = 2,
#alpha = 0.05,
Letters = letters) %>%
as.data.frame() %>%
mutate(Treatment = factor(Treatment, levels = treatment_levels))
# Step 4: Boxplot + significance letters
ggplot(data = Microbio_2025, aes(x = Treatment, y = Corrected_Surface, fill = Treatment)) +
geom_boxplot(show.legend = FALSE) +
# Add significance group letters (here is where the alignment issue happens)
geom_text(data = grouped_means,
aes(x = Treatment, y = 45, label = .equiv.set),
position = position_identity(),
size = 5,
show.legend = FALSE) +
labs(x = "Tested Samples",
y = "Corrected surface area (cm²)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5),
text = element_text(size = 15))
O problema é que seus rótulos contêm espaços à esquerda e à direita. Portanto, para alinhar seus rótulos com boxplots, você pode remover os espaços usando, por exemplo
trimws
: