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