Столбики ошибок неправильно расположены в гистограмме с накоплением (r) - PullRequest
0 голосов
/ 10 ноября 2018

Я пытался создать столбчатую диаграмму в виде столбцов с ошибками, основанную на этом, ранее отвеченном вопросе Создание столбчатой ​​диаграммы в виде столбцов с указанными значениями столбцов ошибок в R

Тем не менее, мои панели ошибок расположены неправильно. Я попытался изменить порядок SD, и это смещает полосы ошибок относительно друг друга, но они все еще не совпадают со столбцами с накоплением.

x <- data.frame(Period = c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"), Sample = c("Day","Day","Day","Day","Day","Day","Day"), "12AM-6AM" = c(23.14,16.43,16,22.71,36.86,87.14,110.71), "6AM-12PM" = c(16.14,20.86,18.43,16.71,15.14,14.29,16), "12PM-6PM" = c(26.86,23.71,25.57,23.43,35.29,38,30), "6PM-12AM" =c(35.86,34.14,31.71,36.43,45.57,44,27.14))

library(dplyr)
library(reshape2)

 mx <- melt(x,  id.vars=1:2)
 mx <- mx %>% group_by(Period) %>%
      mutate(pos = cumsum(value)) %>%
      ungroup() %>%
      mutate(sd = c( 5.4, 2.7, 4.7, 4.4, 8.2, 13.2, 20.7,
                    5.6, 2.3, 5.4, 5.5, 1.6, 4.1, 3.1,
                   5.2, 5.6, 5.9, 3.5, 6.3, 4.5, 6.9,
                   3.5, 6.0, 5.9, 6.2, 8.2, 9.0, 2.4
                   ),
             upper = pos + sd/2,
             lower = pos - sd/2)

    days<-c("Mon", "Tue", "Wed","Thu","Fri", "Sat", "Sun")
    ggplot(mx, aes(x=Period, y=value, fill=variable), xLabels=NA) +
      geom_bar(stat="identity") +
      facet_grid(~Sample) + geom_errorbar(aes(ymin = lower, ymax = upper),
 width = .2, col = "red") +
      theme_bw() + scale_x_discrete(limits = days) +
      xlab(" Day of the Week") + scale_fill_grey() +
      ylab ("Number of calls")

enter image description here

Кроме того, я очень плохо знаком с R и еще новее в переполнении стека (это мой первый вопрос!) - поэтому всегда приветствуются любые советы о том, как форматировать вопросы более четко или более эффективно искать ответы на сайте. :)

1 Ответ

0 голосов
/ 11 ноября 2018

Я думаю, что это происходит из-за того, что variable отображается сверху вниз по оси Y, но сумма в cumsum(value) рассчитывается исходя из предположения, что они отображаются снизу вверх.

Я переупорядочил фрейм данных, прежде чем взять сумму, тогда он работает:

x <- data.frame(Period = c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"), Sample = c("Day","Day","Day","Day","Day","Day","Day"), "12AM-6AM" = c(23.14,16.43,16,22.71,36.86,87.14,110.71), "6AM-12PM" = c(16.14,20.86,18.43,16.71,15.14,14.29,16), "12PM-6PM" = c(26.86,23.71,25.57,23.43,35.29,38,30), "6PM-12AM" =c(35.86,34.14,31.71,36.43,45.57,44,27.14))

library(tidyverse)
library(reshape2)
#> 
#> Attaching package: 'reshape2'
#> The following object is masked from 'package:tidyr':
#> 
#>     smiths

mx <- melt(x,  id.vars=1:2)
mx <- mx %>% 
  mutate(sd = c( 5.4, 2.7, 4.7, 4.4, 8.2, 13.2, 20.7,
                 5.6, 2.3, 5.4, 5.5, 1.6, 4.1, 3.1,
                 5.2, 5.6, 5.9, 3.5, 6.3, 4.5, 6.9,
                 3.5, 6.0, 5.9, 6.2, 8.2, 9.0, 2.4)
  ) %>%
  group_by(Period) %>%
  arrange(desc(variable)) %>%
  mutate(
    pos = cumsum(value),
    upper = pos + sd/2,
    lower = pos - sd/2
  ) %>%
  ungroup()

days<-c("Mon", "Tue", "Wed","Thu","Fri", "Sat", "Sun")
ggplot(mx, aes(x=Period, y=value, fill=variable), xLabels=NA) +
  geom_bar(stat="identity") +
  facet_grid(~Sample) + geom_errorbar(aes(ymin = lower, ymax = upper),
                                      width = .2, col = "red") +
  theme_bw() + scale_x_discrete(limits = days) +
  xlab(" Day of the Week") + scale_fill_grey() +
  ylab ("Number of calls")

Создано в 2018-11-10 пакетом Представление (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...