r - 用分段分布覆盖整体分布图

标签 r ggplot2

library(ggplot2)
library(data.table)

age = sample(1:100,100,T)
segment = sample(1:5,100,T)

data = data.frame(age,segment)

setDT(data)[age > 0 & age < 20, agegroup := "0-19"]

data[age >19 & age <40, agegroup := "20-39"]
data[age >39 & age <60, agegroup := "40-59"]
data[age >59, agegroup := "60+"]

我想代表整体和分割市场的年龄分布。

enter image description here

虚线是整体分布和每个分割市场,以便我可以比较分割市场和整体分布情况。如何在一张图中叠加两个图?

最佳答案

您必须为整体分布创建额外的数据集,合并它们并用不同的 geom_bar 绘图。的。

library(ggplot2) 
library(data.table)

# Using OPs data
data <- data[, .N, .(segment, agegroup)]
data2 <- data[, sum(N), .(agegroup)]
data3 <- merge(data, data2)


data3 <- merge(data3, data3[, .(MAX = max(N)), segment], "segment")

ggplot(data3, aes(agegroup)) +
    geom_bar(aes(y = V1),
             stat = "identity", position = "dodge",
             color = "black", fill = "white",
             linetype = 2) + 
    geom_bar(aes(y = N, fill = N == MAX),
             stat = "identity", position = "dodge",
             width = 0.6, color = "black") +
    facet_wrap(~ segment) +
    labs(x = "Age group",
         y = "Number of observations") +
    theme_bw() +
    scale_fill_manual(values = c("grey", "grey5")) +
    theme(legend.position = "none")

enter image description here

关于r - 用分段分布覆盖整体分布图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796372/

相关文章:

r - 基于ggplot r中数字大小的刻度标签中小数的条件格式

r - 如何在lapply期间将ggplot x-label设置为等于变量名称?

r - 计算 r 中的有效行数

r - 如何将此列表转换为 R 中具有相同名称的数据框?

r - 当通过 `r BATCH script file` 调用时,如何在 R 中获取当前执行脚本的名称

从plotreg()输出中删除框架并旋转标题

r - 使用 ggplot2 绘制按时间顺序排列的时间线

r - 如何添加两条不同行 R 的 ggplot 图例?

r - Shiny 如何动态选择导入数据集的列进行进一步分析

r - R函数环境中自动注入(inject)变量