Как сделать пакетную диаграмму в ggplot из длинного формата данных? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть длинный формат данных, который создается следующим образом:

testAppVectorJG <- c(17, 155, 200, 200, 382, 499, 548, 548, 642, 642, 699, 699)
testVectorJG <- c(testAppVectorJG[1], diff(testAppVectorJG))

testAppVectorJW <- c(145, 209, 366, 548, 548, 613, 746, 928, 1064, 1266, 1371, 1573)
testVectorJW <- c(testAppVectorJW[1], diff(testAppVectorJW))

test_df <- data.frame(puntenvector = c(testVectorJG, testVectorJW),
                      team = c(rep("Jasper & Gijs", length(testAppVectorJG)),
                               rep("Jaap & Wil", length(testAppVectorJW))),
                      Rondenummer = as.factor(1:length(testVectorJG)))

Я хочу сделать столбчатую диаграмму с накоплением с гистограммой для Rondenummer (т. Е. Количество сыгранных раундов).Я хочу видеть процент / распределение очков за раунд на команду.

Пока я пробовал:

ggplot(data = test_df, aes(Rondenummer)) +
    geom_bar(aes(x = puntenvector, fill = team))

Но тогда я получаю:

Warning message:
position_stack requires non-overlapping x intervals

И совсем не сюжет, который я хочу.Как мне добиться этого довольно простого сюжета?

1 Ответ

3 голосов
/ 28 марта 2019

Может быть, что-то вроде этого?

library(ggplot2)

ggplot(data = test_df, aes(Rondenummer, puntenvector, fill = team)) +
   geom_bar(stat='identity')

enter image description here

Если мы хотим включить значения в график, мы можем использовать label с geom_text

ggplot(data = test_df, 
      aes(Rondenummer, puntenvector, fill = team, label = puntenvector)) +
      geom_bar(stat='identity') +
      geom_text(position = position_stack(vjust = 0.5))

enter image description here

И, наконец, если мы хотим изменить порядок Rondenummer после coord_flip(), мы можем добавить scale_x_discrete ипоменяйте местами уровни.

 ggplot(data = test_df, 
   aes(Rondenummer, puntenvector, fill = team, label = puntenvector)) +
   geom_bar(stat='identity') +
   geom_text(position = position_stack(vjust = 0.5)) +
   coord_flip() + 
   scale_x_discrete(limits = rev(levels(test_df$Rondenummer))) 

enter image description here

...