r - 如何叠加多个图

标签 r ggplot2

我想在一张图中绘制 3 种不同的入住模式:a.) 当男性和女性都在工作时; b.) 只有男性工作; c.) 只有女性工作。

我使用 facet 创建了 3 个不同的 data.frames

第一个data.frame的结构(男性和女性都在工作)是:

   structure(list(time = c("04:00", "04:15", "04:30", "04:45", "05:00", 
"05:15", "05:30", "05:45", "06:00", "06:15", "06:30", "06:45", 
"07:00", "07:15", "07:30", "07:45", "08:00", "08:15", "08:30", 
"08:45", "09:00", "09:15", "09:30", "09:45", "10:00", "10:15", 
"10:30", "10:45", "11:00", "11:15"), day = c("Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday"
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("Shifts on Monday", "Shifts on Tuesday", 
"Shifts on Wednesday", "Shifts on Thursday", "Shifts on Friday", 
"Shifts on Saturday", "Shifts on Sunday"), class = "factor"), 
    value = c(102, 110, 116, 120, 148, 152, 188, 204, 318, 348, 
    418, 442, 752, 816, 1064, 1144, 1836, 1942, 2402, 2524, 3240, 
    3324, 3486, 3520, 3594, 3592, 3596, 3568, 3594, 3626), size_f = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", 
    "Sunday"), class = "factor")), row.names = c(NA, 30L), class = "data.frame")

第二个data.frame(男性正在工作)的结构是:
dput(head(melted_WkSTiWeekM , 30))
structure(list(time = c("04:00", "04:15", "04:30", "04:45", "05:00", 
"05:15", "05:30", "05:45", "06:00", "06:15", "06:30", "06:45", 
"07:00", "07:15", "07:30", "07:45", "08:00", "08:15", "08:30", 
"08:45", "09:00", "09:15", "09:30", "09:45", "10:00", "10:15", 
"10:30", "10:45", "11:00", "11:15"), day = c("Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday"
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("Shifts on Monday", "Shifts on Tuesday", 
"Shifts on Wednesday", "Shifts on Thursday", "Shifts on Friday", 
"Shifts on Saturday", "Shifts on Sunday"), class = "factor"), 
    value = c(56, 58, 64, 68, 84, 84, 104, 114, 172, 196, 224, 
    238, 410, 442, 560, 604, 930, 968, 1188, 1230, 1576, 1620, 
    1692, 1706, 1740, 1746, 1752, 1740, 1736, 1756), size_f = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", 
    "Sunday"), class = "factor")), row.names = c(NA, 30L), class = "data.frame")

第二个data.frame(女性在工作)的结构是:
structure(list(time = c("04:00", "04:15", "04:30", "04:45", "05:00", 
"05:15", "05:30", "05:45", "06:00", "06:15", "06:30", "06:45", 
"07:00", "07:15", "07:30", "07:45", "08:00", "08:15", "08:30", 
"08:45", "09:00", "09:15", "09:30", "09:45", "10:00", "10:15", 
"10:30", "10:45", "11:00", "11:15"), day = c("Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday", "Monday", "Monday", "Monday", "Monday"
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("Shifts on Monday", "Shifts on Tuesday", 
"Shifts on Wednesday", "Shifts on Thursday", "Shifts on Friday", 
"Shifts on Saturday", "Shifts on Sunday"), class = "factor"), 
    value = c(46, 52, 52, 52, 64, 68, 84, 90, 146, 152, 194, 
    204, 342, 374, 504, 540, 906, 974, 1214, 1294, 1664, 1704, 
    1794, 1814, 1854, 1846, 1844, 1828, 1858, 1870), size_f = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", 
    "Sunday"), class = "factor")), row.names = c(NA, 30L), class = "data.frame")

在此之后我创建了一个
melted_WkSTiWeekAll=cbind(melted_WkSTiWeek,melted_WkSTiWeekM,melted_WkSTiWeekF)



structure(list(time = c("04:00", "04:15", "04:30", "04:45", "05:00"
), day = c("Monday", "Monday", "Monday", "Monday", "Monday"), 
    variable = structure(c(1L, 1L, 1L, 1L, 1L), .Label = c("Shifts on Monday", 
    "Shifts on Tuesday", "Shifts on Wednesday", "Shifts on Thursday", 
    "Shifts on Friday", "Shifts on Saturday", "Shifts on Sunday"
    ), class = "factor"), value = c(102, 110, 116, 120, 148), 
    size_f = structure(c(1L, 1L, 1L, 1L, 1L), .Label = c("Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", 
    "Sunday"), class = "factor"), time = c("04:00", "04:15", 
    "04:30", "04:45", "05:00"), day = c("Monday", "Monday", "Monday", 
    "Monday", "Monday"), variable = structure(c(1L, 1L, 1L, 1L, 
    1L), .Label = c("Shifts on Monday", "Shifts on Tuesday", 
    "Shifts on Wednesday", "Shifts on Thursday", "Shifts on Friday", 
    "Shifts on Saturday", "Shifts on Sunday"), class = "factor"), 
    value = c(56, 58, 64, 68, 84), size_f = structure(c(1L, 1L, 
    1L, 1L, 1L), .Label = c("Monday", "Tuesday", "Wednesday", 
    "Thursday", "Friday", "Saturday", "Sunday"), class = "factor"), 
    time = c("04:00", "04:15", "04:30", "04:45", "05:00"), day = c("Monday", 
    "Monday", "Monday", "Monday", "Monday"), variable = structure(c(1L, 
    1L, 1L, 1L, 1L), .Label = c("Shifts on Monday", "Shifts on Tuesday", 
    "Shifts on Wednesday", "Shifts on Thursday", "Shifts on Friday", 
    "Shifts on Saturday", "Shifts on Sunday"), class = "factor"), 
    value = c(46, 52, 52, 52, 64), size_f = structure(c(1L, 1L, 
    1L, 1L, 1L), .Label = c("Monday", "Tuesday", "Wednesday", 
    "Thursday", "Friday", "Saturday", "Sunday"), class = "factor")), row.names = c(NA, 
5L), class = "data.frame")

变量 time, day, variable and size_f是相似的。

我想在同一个图中绘制 3 个图。但我不知道如何做到这一点

使用建议的 facet下面的情节

情节 1

enter image description here

情节2

enter image description here

图 3

enter image description here

如何前进

我想制作一个这样的锅

Lesnard

最佳答案

您可以这样做,但将您的数据帧合并在一起并将它们标记为 All , Male , 和 Female因此。然后您可以在您的 ggplot 中使用该标签进行分组(着色)功能。

使用 geom_barposition = "identity"您将在彼此的顶部放置条形广告以消除条形之间的空间(以模仿密度图外观)width设置为 1 . alpha可用于更改 fill 的透明度颜色。

为了获得一周中每一天的单独图,我们使用 facet_wrap(~day) .

library(tidyverse)

melted_WkSTiWeekAll <- bind_rows(list(All=melted_WkSTiWeek,
                                      Male=melted_WkSTiWeekM,
                                      Female=melted_WkSTiWeekF), 
                                                                .id = 'source')

ggplot(melted_WkSTiWeekAll, aes(x=time, y=value, fill=source)) + 
  geom_bar(stat="identity", position = "identity", alpha=.3, width=1) + 
  facet_wrap(~day)

注意这里我们只得到一个 facet因为提供的数据只有星期一的条目。

创建于 2019-05-31 由 reprex package (v0.3.0)

关于r - 如何叠加多个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383936/

相关文章:

r - 长转宽格式: keep row orders and use only part of row values for newly created column names

从二进制文件中读取无符号整数 64 位

r - 不带coord_flip的水平ggplot2::geom_violin

r - facet_grid问题: input string 1 is invalid in this locale?

r - 将汇总表添加到分面网格箱形图中

r - 如何在 R 中绘制带有条件 p 值和置信区间的方差分析?

使用操作按钮刷新主面板屏幕

r - 如何在热图中围绕 "groups"绘制框?

r - 使用 ggplot2 添加 95% 的预测置信区间

c++ - 使用包含索引的 IntegerVector 子集 Rcpp::DateVector?运算符 [] 重载