具有x,y和填充类别R的条形图

时间:2018-09-24 09:16:09

标签: r ggplot2 histogram bar-chart

我具有以下类型的数据,并想创建一个堆叠的条形图,它将在y轴上显示Number的总和,而在x轴上显示Distance的不同仓位将指示距离。实际上,这将是一种直方图,但频率不是y,而是每个集合bin的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 :(得分:2)

如果要成为指定({Distance)箱而不是直方图的箱,这里有2种解决方案:

选项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