Барплот с заданными x, y и категориями заполнения R - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующий тип данных, и я хотел бы создать столбчатую диаграмму с накоплением, которая показала бы сумму Number по оси y для различных бинов Distance по оси x, которая указала бы расстояние.На самом деле, это будет своего рода гистограмма, но не с частотами по y, а с суммами Number на набор бинов.Это будет кумулятивно для всех категорий в Dest, которые будут отмечены разными цветами.Большое спасибо.

library(ggplot2)
df <- data.frame(c(rep("A",20),rep("B",25),rep("C",35)),sample(1:30, 80,replace = TRUE),
                 rnorm(80,45,8))
colnames(df) <- c("Dest","Number","Distance")

ggplot(data = df, aes(x = Distance, y = Number, fill = Dest)) + 
        geom_histogram(colour = c("red","blue","green")) 

1 Ответ

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

Вот 2 решения на тот случай, если вы хотите быть тем, которое задает (Distance) ячейки, а не гистограмму:

Опция 1 (с использованием ntile)

Вот решение, которое позволяет вам указать количество бинов, используя ntile, что означает, что эти бины будут иметь более или менее одинаковое количество наблюдений:

library(tidyverse)

df <- data.frame(c(rep("A",20),rep("B",25),rep("C",35)),sample(1:30, 80,replace = TRUE),
                 rnorm(80,45,8))
colnames(df) <- c("Dest","Number","Distance")


df %>%
  group_by(bin = ntile(Distance, 3)) %>%    # specify number of bins you want  
  mutate(DistRange = paste0(round(min(Distance)), " - ", round(max(Distance)))) %>%
  ungroup() %>%
  group_by(Dest, bin, DistRange = fct_reorder(DistRange, bin)) %>%
  summarise(sum_number = sum(Number)) %>%
  ungroup() %>%
  ggplot(aes(DistRange, sum_number, fill=Dest))+
  geom_col()

enter image description here

Опция 2 (с использованием cut)

Альтернативный вариант с использованием cut для указания диапазонов:

df %>%
  mutate(bin = cut(Distance, breaks = c(min(Distance)-1, 40, 50, 55, max(Distance)))) %>%  # specify ranges
  group_by(Dest, bin) %>%
  summarise(sum_number = sum(Number)) %>%
  ungroup() %>%
  ggplot(aes(bin, sum_number, fill=Dest))+
  geom_col()

enter image description here

...