Постоянная ширина боксов, если отсутствуют данные по группам? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть аналогичный вопрос, ранее обсуждавшийся для барплотов , но с отсутствующим решением для боксплотов : Последовательная ширина для geom_bar в случае отсутствия данных

Я бы хотел создать боксов по группам . Однако данные для некоторых групп могут отсутствовать, что приводит к увеличению ширины ящиков с отсутствующими группами .

Я пытался указать geom_boxplot(width = value) или geom_boxplot(varwidth = F), но это не работает.

Также, как было предложено для примера с диаграммами, я попытался добавить значения NA для отсутствующей группы данных. Боксплот только пропускает пропущенные данные и расширяет его ширину. Я получил предупреждение:

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

Пустой пример:

# library
library(ggplot2)

# create a data frame
variety=rep(LETTERS[1:7], each=40)
treatment=rep(c("high","low"),each=20)
note=seq(1:280)+sample(1:150, 280, replace=T)

# put data together
data=data.frame(variety, treatment ,  note)

ggplot(data, aes(x=variety, y=note, fill=treatment)) + 
  geom_boxplot()

Boxplots имеют одинаковую ширину, если есть значения для каждой группы:

boxplots have the same width is there are values for each group

Удалить значения для 1 группы:

# subset the data to have a missing data for group:
data.sub<-subset(data, treatment != "high" | variety != "E" )

windows(4,3)
ggplot(data.sub, aes(x=variety, y=note, fill=treatment)) + 
  geom_boxplot()

Boxplot с отсутствующими данными шире других:

enter image description here


Есть ли способ, как сохранить постоянную ширину ящиков?

1 Ответ

0 голосов
/ 07 сентября 2018

Мы можем использовать аргумент preserve в position_dodge.

С ?position_dodge

preserve: Должно ли уклонение сохранять общую ширину всех элементов в позиции или ширину одного элемента?

ggplot(data.sub, aes(x=variety, y=note, fill=treatment)) + 
 geom_boxplot(position = position_dodge(preserve = "single"))

enter image description here

...