Как увеличить внутреннее поле ggplot boxplot в facet_grid?

Я настраиваю boxplots, чтобы представить их в ggplot2 facet_grid, и я хотел бы увеличить внутреннее поле.

К сожалению, я не умею увеличивать расстояние до рамки грани.

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

Как я могу увеличить внутреннее поле (левое и правое), как указано синими стрелками?

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

require(ggplot2)
dat <- rbind(data.frame(approach=1,product=1,value=seq(1,20,0.5)), 
             data.frame(approach=1,product=2,value=seq(5,15,0.3)), 
             data.frame(approach=1,product=3,value=seq(5,17,0.2)), 
             data.frame(approach=2,product=1,value=seq(1,13,0.3)), 
             data.frame(approach=2,product=2,value=seq(3,18,0.5)), 
             data.frame(approach=2,product=3,value=seq(4,25,0.7)), 
             data.frame(approach=3,product=1,value=seq(1,15,0.6)), 
             data.frame(approach=3,product=2,value=seq(3,16,0.5)), 
             data.frame(approach=3,product=3,value=seq(1,10,0.1)))

gg1 <- ggplot(dat, aes(group =product, y = value)) + 
  geom_boxplot() + 
  ylab("size (cm)")+ 
  theme(panel.spacing = unit(0.1, 'lines')) + 
  theme(plot.background = element_rect(fill ="lightgrey" )) +
  scale_fill_grey(start = 0.0, end = 1) +
  theme_bw()+ 
  xlab("") +   
  facet_grid(cols=vars(approach)) +
  theme(axis.text.x = element_text(colour="black")) + 
  theme(axis.text.y=element_text(colour="black"))+ 
  theme(panel.spacing=unit(0,"lines")) + 
  guides(fill=guide_legend(title="Products")) + 
  theme(plot.background = element_rect(fill ="lightgrey" ))

gg1

Кроме того, как это будет работать для дискретной шкалы?

require(ggplot2)
dat <- rbind(data.frame(approach=1,product=1,value=seq(1,20,0.5)), 
             data.frame(approach=1,product=2,value=seq(5,15,0.3)), 
             data.frame(approach=1,product=3,value=seq(5,17,0.2)), 
             data.frame(approach=2,product=1,value=seq(1,13,0.3)), 
             data.frame(approach=2,product=2,value=seq(3,18,0.5)), 
             data.frame(approach=2,product=3,value=seq(4,25,0.7)), 
             data.frame(approach=3,product=1,value=seq(1,15,0.6)), 
             data.frame(approach=3,product=2,value=seq(3,16,0.5)), 
             data.frame(approach=3,product=3,value=seq(1,10,0.1)))

dat$product<-as.factor(dat$product)

gg1<-ggplot(dat, aes(x =product, y = value)) +
  geom_boxplot() + 
  ylab("size (cm)")+ 
  theme(panel.spacing = unit(0.1, 'lines')) +
  theme(plot.background = element_rect(fill ="lightgrey" )) +
  scale_fill_grey(start = 0.0, end = 1) +  
  theme_bw()+ xlab("") + 
  facet_grid(cols=vars(approach)) +
  theme(axis.text.x = element_text(colour="black")) +
  theme(axis.text.y=element_text(colour="black"))+ 
  theme(panel.spacing=unit(0,"lines")) + 
  guides(fill=guide_legend(title="Products")) + 
  theme(plot.background = element_rect(fill ="lightgrey" ))

gg1

person Niels    schedule 04.04.2019    source источник
comment
добавьте xlim(c(-1,1)) к вашим командам ggplot.   -  person J_F    schedule 04.04.2019


Ответы (1)


Часть, на которую вы смотрите, управляется масштабами, а не гранями или полями темы.

Любой из следующих будет работать. В этом случае их результаты аналогичны, поскольку диапазон ваших значений x находится в районе (-1, 1). В общем, посмотрите в файле справки для ?expand_scale примеры мультипликативных и аддитивных коэффициентов расширения.

gg1 + scale_x_continuous(expand = c(0.2, 0)) # expand scales by a multiple of 20%

gg1 + scale_x_continuous(expand = c(0, 0.2)) # expand scales by an addition of 0.2

иллюстрация

person Z.Lin    schedule 05.04.2019
comment
Спасибо за отличное предложение. Обходной путь путем расширения масштаба великолепен! Однако, как мы могли настроить его с помощью дискретной шкалы, когда в этом коде данные для продукта (ось x) были бы фактором? - person Niels; 05.04.2019
comment
Параметр expand можно использовать как для числовых, так и для дискретных осей. Вместо этого вы можете использовать scale_x_discrete(expand = <something>). - person Z.Lin; 05.04.2019
comment
Спасибо за отличное предложение! Я также попытался расположить box_plot с position_dodge, который работает, когда ось x является непрерывной переменной, однако, когда ось x является дискретной переменной, position_dodge не работает. Было бы неплохо, если бы у вас есть предложение по этой проблеме. - person Niels; 05.04.2019