Согласованная ширина поля с отсутствующими значениями в диаграмме ggplot

В ggplot2 я хочу, чтобы мои блоки на блочном графике имели одинаковую ширину, даже если заданная комбинация уровней не существует.

Например, в mtcars cyl=8 и gear=4 не существуют, что приводит к большим полосам на этом графике:

qplot(data=mtcars, x=as.factor(cyl), y=mpg,
      colour=as.factor(gear), geom="boxplot")

введите здесь описание изображения

Для гистограммы заполнение нашего фрейма данных значениями NA для этих комбинаций уровней решит проблему, но не для коробчатой ​​диаграммы:

mtcars.fill <- data.frame(cyl=8,gear=4,mpg=NA)
mtcars <- rbind.fill(mtcars,mtcars.fill)

qplot(data=mtcars, x=as.factor(cyl), y=mpg, colour=as.factor(gear), geom="boxplot")

Warning message:
Removed 1 rows containing non-finite values (stat_boxplot). 

Что приводит к точно такому же сюжету.

stat_boxplot имеет аргумент для значений NA, но по умолчанию он не удаляет NA:

na.rm = FALSE

person Etienne Low-Décarie    schedule 04.11.2013    source источник
comment
Согласованный! stackoverflow.com/questions/15367762/ есть ответ, хотя все решения довольно уродливые хаки.   -  person Etienne Low-Décarie    schedule 05.11.2013


Ответы (1)


Лучшее, что я могу предложить, это обходной путь с использованием facet_grid(). Это имеет дополнительное преимущество, заключающееся в том, что точки из слоя geom_point() будут совпадать с ящичковыми диаграммами.

library(ggplot2)

plot1 = ggplot(mtcars, aes(x=factor(gear), y=mpg, colour=factor(gear))) +
        geom_boxplot(space=0) + 
        facet_grid(. ~ cyl, labeller="label_both")

plot2 = plot1 + geom_point()

library(gridExtra)
ggsave(filename="plots.png", plot=arrangeGrob(plot1, plot2, ncol=2), 
       width=10, height=4, dpi=120)

введите здесь описание изображения

person bdemarest    schedule 05.11.2013
comment
Спасибо за это предложение. Однако на большинстве своих графиков я уже сопоставляю другую переменную с фасетом. - person Etienne Low-Décarie; 05.11.2013