Я пытаюсь создать несколько блочных диаграмм логнормальных данных по группам, используя как geom_boxplot, так и scale_y_log10. Когда я проверил графики с фактическими значениями для медианы и других квартилей, я понял, что некоторые из коробочных диаграмм были построены неправильно, то есть медиана и / или другие квартили были не в нужном месте. После долгих испытаний я понял, что при использовании geom_boxplot и scale_y_log10 группы с двумя значениями дают только ошибочные графики.
Вот код для тестового примера:
f1 <- function(x) {
log10(mean(10 ^ x))
}
library(ggplot2)
test1 <- data.frame("value" = c(3, 45, 2, 100),
"field" = c("a", "a", "a", "a"),
"group" = c("1", "1", "2", "2"))
test2 <- data.frame("value" = c(3, 10, 45, 2, 70, 100),
"field" = c("a", "a", "a", "a", "a", "a"),
"group" = c("1", "1", "1", "2", "2", "2"))
tapply(test1$value, test1$group, median, na.rm = TRUE)
tapply(test1$value, test1$group, mean, na.rm = TRUE)
ggplot(test1, aes(x=field, y=value)) + geom_boxplot() + facet_grid(~ group) +
geom_hline(yintercept = c(24, 51), colour="blue", linetype=2) +
geom_hline(yintercept = c(24, 51), colour="red", linetype=2) +
scale_y_log10() +
stat_summary(fun.y=f1, geom="point", shape=1, size=3, color="red",
fill="red") +
theme(legend.position="none") +
scale_fill_brewer(palette="Set3")
tapply(test2$value, test2$group, median, na.rm = TRUE)
tapply(test2$value, test2$group, mean, na.rm = TRUE)
ggplot(test2, aes(x=field, y=value)) + geom_boxplot() + facet_grid(~ group)+
geom_hline(yintercept = c(10, 70), colour="blue", linetype=2) +
geom_hline(yintercept = c(19.3, 57.3), colour="red", linetype=2) +
scale_y_log10() +
stat_summary(fun.y=f1, geom="point", shape=1, size=3, color="red",
fill="red") +
theme(legend.position="none") +
scale_fill_brewer(palette="Set3")
Как видно из приведенных выше примеров, test1 (с двумя значениями на группу) выдает коробочные диаграммы с неправильными медианами, а test2 (с тремя значениями на группу) дает правильные коробочные диаграммы.
Есть идеи, почему это происходит?