ggplot boxplot - длина усов с логарифмической осью
Я пытаюсь создать горизонтальное поле с логарифмической осью, используя ggplot2. Но длина усов не так.
Минимальный воспроизводимый пример:
Некоторые данные
library(ggplot2)
library(reshape2)
set.seed(1234)
my.df <- data.frame(a = rnorm(1000,150,50), b = rnorm(1000,500,150))
my.df$a[which(my.df$a < 5)] <- 5
my.df$b[which(my.df$b < 5)] <- 5
Если я построю это с использованием базы Rboxplot()
, Все отлично
boxplot(my.df, log="x", horizontal=T)
Но с ggplot,
my.df.long <- melt(my.df, value.name = "vals")
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
scale_y_log10(breaks=c(5,10,20,50,100,200,500,1000), limits=c(5,1000)) +
theme_bw() + coord_flip()
Я получаю этот график, в котором усы имеют неправильную длину (см., Например, как много дополнительных выбросов ниже усов и ни одного выше).
Обратите внимание, что без учета бревен ggplot имеет правильную длину.
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
theme_bw() + coord_flip()
Как создать горизонтальный логарифмический блок-график, используя ggplot с усиками правильной длины? Желательно, чтобы усы расширялись в 1,5 раза по IQR.
Обновить
Как объяснилВот, Можно использоватьcoord_trans(y = "log10")
вместоscale_y_log10
, что приведет к вычислению статистикидо преобразование данных.тем не мение, coord_trans
нельзя использовать в сочетании сcoord_flip
, Таким образом, это не решает проблему создания горизонтальных прямоугольников с осью журнала.