Р: Как построить две колонки сравнительной гистограммы в одном графике? - PullRequest
0 голосов
/ 27 февраля 2020

R: Как построить сравнительную гистограмму с двумя столбцами на одном графике?

due_vs_prom <- factor( c(unique(inv$Due_Bin)),levels = c("early","<=5","<=30","<=10","<=50",">50"))
due_counts <- inv %>% group_by(Due_Bin) %>% summarize(count = n())
prom_counts <- inv %>% group_by(Prom_Bin) %>% summarize(count = n())

due_vs_prom <- data.frame(due_vs_prom , due_counts , prom_counts )

plot_due_vs_prom <- plot_ly(due_vs_prom, y = ~due_counts , x = ~ (prom_counts), type = 'bar', name = 'Due_Bin') %>%
  add_trace(x = ~due_counts, name = 'Late Bin') %>%
  layout(xaxis = list(title = 'Count'), barmode = 'group')

DataSet like:

Promise_Bin             Due_Bin

early                   early             
early                   >50
early                   >50
>50                     >50
>50                     >50
<=50                    <=50
early                   early
early                   early
<=5                     <50
<=5                     <=5
<=30                    <=30
early                   early
<=30                    >50
<=30                    <=30                    
<=10                    <=10

Ожидаемый график: enter image description here

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете преобразовать свой фрейм данных в более длинный формат (здесь, используя pivot_longer из tidyr пакета), сгруппировать по «корзине» и различным «категориям», чтобы сосчитать для каждого из них и, наконец, построить его, используя geom_col :

library(dplyr)
library(tidyr)
library(ggplot2)
df %>% pivot_longer(everything(),names_to = "var",values_to = "val") %>% 
  group_by(var,val) %>% count() %>%
  ggplot(aes(x = val, y = n, fill = var))+
  geom_col(position = position_dodge())

enter image description here

Отвечает ли он на ваш вопрос?


Воспроизводимые данные

structure(list(Promise_Bin = c("early", "early", "early", ">50", 
">50", "<=50", "early", "early", "<=5", "<=5", "<=30", "early", 
"<=30", "<=30", "<=10"), Due_Bin = c("early", ">50", ">50", ">50", 
">50", "<=50", "early", "early", "<50", "<=5", "<=30", "early", 
">50", "<=30", "<=10")), row.names = c(NA, -15L), class = c("data.table", 
"data.frame"))
...