Улучшение читаемости коробочного графика - PullRequest
1 голос
/ 08 марта 2020

Изготовление ящиков для данных о рейсах, содержащихся в пакете nycflights13, я получаю на следующем ящике. enter image description here Код:

library(ggplot2)
library(nycflights13)

attach(flights)

ggplot(flights, aes(x = "", y = dep_delay)) + 
  geom_boxplot(color="darkblue")

Как показано на рисунке, существует множество выбросов, которые затрудняют чтение чего-либо еще, кроме этих выбросов.

Существуют ли какие-либо методы / приемы для улучшения читаемости этого сюжета?

Ответы [ 2 ]

3 голосов
/ 08 марта 2020

У нас есть много вариантов. Но в основном мы можем

преобразовать:

library(ggplot2)
library(nycflights13)

ggplot(flights, aes(x = "", y = asinh(dep_delay))) + 
  geom_boxplot(color="darkblue")

enter image description here

или использовать другой тип графика:

ggplot(flights, aes(x = "", y = dep_delay)) + 
  geom_point(alpha=0.7) +
  geom_jitter()

enter image description here

или преобразуйте и используйте график другого типа:

ggplot(flights, aes(x = "", y = asinh(dep_delay))) + 
geom_violin()

enter image description here

Какое правильное решение во многом зависит от того, что вы хотите проиллюстрировать сюжетом (и, конечно же, доступными данными)

3 голосов
/ 08 марта 2020

Как подсказывает @dario, вы можете преобразовать масштаб по оси Y. Межквартильные диапазоны (диапазон ящиков) останутся прежними, но поскольку усы определены как 1,5 * IQR, определение «выброса» будет отличаться в зависимости от шкалы ... Я обнаружил, что преобразование asinh() немного слишком экстремально так что попробовал преобразование со знаком со знаком root, а также ...

library(ggplot2)
library(nycflights13)
library(cowplot)

tt <- scales::trans_new("asinh", transform=asinh, inverse=sinh)
ss <- scales::trans_new("ssqrt", transform=function(x) sign(x)*sqrt(abs(x)), inverse=function(x) sign(x)*x^2)

gg0 <- ggplot(flights, aes(y = dep_delay)) + 
    geom_boxplot(color="darkblue")+
    scale_x_continuous(breaks=NULL)

plot_grid(nrow=1,
    gg0 + ylab("flight delay\n(original scale)"),
    gg0 + scale_y_continuous(trans=tt) + ylab("flight delay\n(asinh transform)"),
    gg0 + scale_y_continuous(trans=ss) + ylab("flight delay\n(signed sqrt transform)"))

ggsave("scale_boxplot.png")

enter image description here

...