Substitua inferior, superior etc. no boxplot ao agrupar

or padrão, para o quantil inferior, médio e superior emgeom_boxplotão considerados os calibres de 25% -, 50% - e 75%. Estes são calculados a partir dey, mas pode ser definido manualmente através dos argumentos estéticoslower, upper, middle (fornecendo tambémx, ymin eymax e configuraçãostat="identity").

ontudo, ao fazê-lo, ocorrem vários efeitos indesejáveis (consulte a versão 1 no código de exemplo

O argumentogroup é ignorado, portanto, todos os valores de uma coluna são considerados nos cálculos (por exemplo, ao calcular o quantil mais baixo para cada grupo)Os boxplots idênticos resultantes são agrupados porx e repetido no grupo sempre que o valor específico do grupo ocorrer nos dados (em vez de mesclar as caixas com outras mais amplas)outliers não são plotados

Ao pré-computar os valores desejados e armazená-los em um novo quadro de dados, é possível lidar com os dois primeiros pontos (consulte a versão 2 no código de exemplo), enquanto o terceiro ponto é corrigido identificando os valores extremos e adicionando-os separadamente a o gráfico viageom_point.

Existe uma maneira mais direta de alterar os quantis, sem ter esses efeitos indesejado

Exemple Code:

set.seed(12)

# Random data in B, grouped by values 1 to 4 in A
u <- data.frame(A = sample.int(4, 100, replace = TRUE), B = rnorm(100))

# Desired arguments
qymax <- 0.9
qymin <- 0.1
qmiddle <- 0.5
qupper <- 0.8
qlower <- 0.2

Versão 1: boxplots repetidos por valor em A, agrupados por A

ggplot(u, aes(x = A, y = B)) + 
  geom_boxplot(aes(group=A, 
                   lower = quantile(B, qlower), 
                   upper = quantile(B, qupper), 
                   middle = quantile(B, qmiddle), 
                   ymin = quantile(B, qymin), 
                   ymax = quantile(B, qymax) ), 
               stat="identity")

ersão 2: Calcule os argumentos primeiro para cada grupo. Solução Base R

Bgrouped <- lapply(unique(u$A), function(a) u$B[u$A == a])
.lower <- sapply(Bgrouped, function(x) quantile(x, qlower))
.upper <- sapply(Bgrouped, function(x) quantile(x, qupper))
.middle <- sapply(Bgrouped, function(x) quantile(x, qmiddle))
.ymin <- sapply(Bgrouped, function(x) quantile(x, qymin))
.ymax <- sapply(Bgrouped, function(x) quantile(x, qymax))

u <- data.frame(A = unique(u$A), 
                lower = .lower, 
                upper = .upper, 
                middle = .middle, 
                ymin = .ymin, 
                ymax = .ymax)    

ggplot(u, aes(x = A)) + 
  geom_boxplot(aes(lower = lower, upper = upper, 
                   middle = middle, ymin = ymin, ymax = ymax ), 
               stat="identity")