我具有以下类型的数据,并想创建一个堆叠的条形图,它将在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"))
答案 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()
选项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()