ggplot2 geom_bar: центрирование баров - PullRequest
0 голосов
/ 20 сентября 2018

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

Please see my current plot on this link

Что мне нужно сделать, это центрировать столбцы по горизонтали.На данный момент они поляризованы по сторонам, особенно на столбцах 2009 и 2012 годов.

Центрирование их позволило бы мне свободно регулировать их ширину, тогда как теперь я не могу.текущий, автономный код:

install.packages('ggplot2')
library(ggplot2)

# Data    

Year = c('2009','2009','2009','2009','2010','2010','2010','2010','2011','2011','2011','2011','2012','2012','2012','2012')

City = c('Kaunas','Vilnius','Kaunas','Vilnius','Kaunas','Vilnius','Kaunas','Vilnius',
         'Kaunas','Vilnius','Kaunas','Vilnius','Kaunas','Vilnius','Kaunas','Vilnius')

Busy = c('Peak', 'Peak', 'Off-peak', 'Off-peak', 'Peak', 'Peak', 'Off-peak', 'Off-peak', 'Peak', 'Peak', 'Off-peak', 
         'Off-peak', 'Peak', 'Peak', 'Off-peak', 'Off-peak')

Result = c(-0.417277550641143, 0.540415934506096, -0.887323992801467, -1.0016151369497, -1.69512596882652, 
           -0.474180286913426, -1.87972395432173, -1.55647964460481, -1.10385766877877, -3.19261229467907, 
           -2.11137007243349, -3.24910554029829, -0.949278709972917, -2.22558030912235, -1.3496651478542, -2.59961942855099)

pvalue.asterisks = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, '*', NA, '*', NA, NA, NA, NA)

Results = data.frame(Year, City, Busy, Result, pvalue.asterisks)

str(Results)
Results

# Plot

ggplot(Results, aes(Year, Result, fill=City)) +
  ylab(expression(paste(italic('t'), '-value'))) +
  facet_grid(list('Busy', 'Year')) + scale_fill_grey(start = 0, end = .6) +
  geom_bar(width=2.9, stat = "identity", position = position_dodge(width = 3)) +
  scale_y_continuous(expand = c(.035,0)) + scale_x_discrete(expand = c(.7,.4)) +
  theme( axis.title.x=element_blank(), axis.text.x = element_blank(),
         axis.title.y = element_text(size=19, face="bold", margin = margin(0, 3, 0, 0)),
         axis.text.y = element_text(size = 13),
         legend.title = element_blank(), legend.text = element_text(size=17),
         legend.background = element_rect(fill="white", size=0.1, linetype="solid"),
         legend.key.size = unit(1.7,"line"), axis.ticks.x=element_blank(), legend.position = c(.167, .6),
         panel.background = element_blank(),    plot.title = element_blank(),
         legend.margin=margin(c(-.05,.14,.11,.1), unit='cm'), 
         panel.grid.major.y = element_line(colour = "grey90"),
         panel.grid.major.x = element_blank(), plot.margin = unit(c(.05, .1, 0, .1), 'cm'),
         strip.text.x = element_text(face='bold', size=15, margin = margin(.2, 0, .2, 0, "cm")),
         strip.text.y = element_text(face='bold', size=15, margin = margin(0, .2, 0, .2, "cm")),
         strip.background = element_rect(colour="grey48", fill='grey95'), panel.spacing = unit(.08, "lines")) +
  geom_text(aes(x=Year, y=Result, label=pvalue.asterisks), vjust=-.01, colour= 'white', size=15, hjust=-.168 )

- Большое спасибо

Ответы [ 2 ]

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

Вам просто нужно добавить scales = 'free_x' в ваш скрипт.Вы также можете заменить geom_bar(stat = 'identity') на geom_col()

Соответствующую информацию, взятую из ?facet_grid

scales: шкалы являются общими для всех аспектов (по умолчанию, «фиксированный») илиразличаются ли они по строкам ("free_x"), столбцам ("free_y") или по обеим строкам и столбцам ("free")?

p1 <- ggplot(Results, aes(Year, Result, fill=City)) +
  ylab(expression(paste(italic('t'), '-value'))) +
  facet_grid(rows = vars(Busy), cols = vars(Year), scales = 'free_x') +  
  scale_fill_grey(start = 0, end = .6) +
  geom_col(position = position_dodge(width = 0.9)) +
  scale_y_continuous(expand = c(.035,0)) + 
  scale_x_discrete(expand = c(.7,.4))

p1 +
  theme( axis.title.x=element_blank(), axis.text.x = element_blank(),
         axis.title.y = element_text(size=19, face="bold", margin = margin(0, 3, 0, 0)),
         axis.text.y = element_text(size = 13),
         legend.title = element_blank(), legend.text = element_text(size=17),
         legend.background = element_rect(fill="white", size=0.1, linetype="solid"),
         legend.key.size = unit(1.7,"line"), axis.ticks.x=element_blank(), legend.position = c(.167, .6),
         panel.background = element_blank(),    plot.title = element_blank(),
         legend.margin=margin(c(-.05,.14,.11,.1), unit='cm'), 
         panel.grid.major.y = element_line(colour = "grey90"),
         panel.grid.major.x = element_blank(), plot.margin = unit(c(.05, .1, 0, .1), 'cm'),
         strip.text.x = element_text(face='bold', size=15, margin = margin(.2, 0, .2, 0, "cm")),
         strip.text.y = element_text(face='bold', size=15, margin = margin(0, .2, 0, .2, "cm")),
         strip.background = element_rect(colour="grey48", fill='grey95'), panel.spacing = unit(.08, "lines")) +
  geom_text(aes(x=Year, y=Result, label=pvalue.asterisks), vjust=-.01, colour= 'white', size=15, hjust=-.168 )
#> Warning: Removed 14 rows containing missing values (geom_text).

Создано в 2018-09-20 пакетом Представление (v0.2.1.9000)

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

Если вы удалите материал theme, вы увидите проблему, ось X - это годы, и она пытается построить каждый из них по значению x для этого года.Один из способов исправить это - установить для параметра scales значение facet_grid равным "free_x".

facet_grid(list('Busy', 'Year'), scales="free_x")

, а затем вам нужно только настроить размер стержней.

geom_bar(width=0.5, stat = "identity", position = "dodge")
...