如何将geom_bar、geom_point和geom_line组合成一张图?

2023-12-04

我试图通过三个并行条件(CET、RES、END)和对干预的响应(高或低,即 CET_Hi、CET_Lo 等)来可视化两个时间点(干预前和干预后)的连续数据点

我想创建一个条形图,显示 X 轴上每个条件的平均输出,并带有单独的时间条(前和后)。然后,我想用线条覆盖前和后的各个主题数据点,以连接主题数据点并按颜色对响应进行分组。

我已使用 ggplot2 和 geom_bar 函数成功创建了条形图。我还让 geom_point 按条件覆盖各个点,但无法使位置与时间对齐。

ggplot(Leg_Press_Summary, aes(x=Condition, y=Leg_Press, fill=as.factor(Time))) + 
geom_bar(stat="identity", position=position_dodge()) + 
scale_fill_brewer(palette="Blues", name = "Time", labels = c("Pre", "Post")) +
geom_point(data=Phys_Data, aes(x=Condition, y=Leg_Press, colour=Response, fill=as.factor(Time))) +
geom_line(data=Phys_Data, aes(x=Condition, y=Leg_Press, group=Subject)) + 
labs(title="Leg Press", x="Condition", y ="Leg Press (kg)")

我期望 geom_points 根据时间定位,但是,它们点只是堆叠在每个条件的前栏和后栏之间的垂直线上。

我的结果:

My ggplot2 creation

图我正在尝试重新创建:

Figure I'm trying to recreate

我怎样才能解决这个问题?

下面包含数据集,我忘记将其包含在原始帖子中。

LegPress
# A tibble: 36 x 5
Subject  Time Condition Response Leg_Press

6     1 CET       CET_Hi        212.
6     2 CET       CET_Hi        300 
9     1 CET       CET_Lo        350 
9     2 CET       CET_Lo        370 
14     1 CET       CET_Hi        330 
14     2 CET       CET_Hi        450 
26     1 CET       CET_Hi        180 
26     2 CET       CET_Hi        250 
28     1 CET       CET_Lo        230 
28     2 CET       CET_Lo        275 
29     1 CET       CET_Lo        330 
29     2 CET       CET_Lo        325 
2     1 RES       RES_Hi        142.
2     2 RES       RES_Hi        225 
16     1 RES       RES_Lo        280 
16     2 RES       RES_Lo        320 
19     1 RES       RES_Hi        205 
19     2 RES       RES_Hi        295 
27     1 RES       RES_Hi        175 
27     2 RES       RES_Hi        260 
31     1 RES       RES_Lo        340 
31     2 RES       RES_Lo        370 
32     1 RES       RES_Lo        310 
32     2 RES       RES_Lo        370 
8     1 END       END_Lo        205 
8     2 END       END_Lo        250 
13     1 END       END_Hi        310 
13     2 END       END_Hi        320 
20     1 END       END_Hi        200 
20     2 END       END_Hi        185 
24     1 END       END_Lo        260 
24     2 END       END_Lo        270 
25     1 END       END_Hi        210 
25     2 END       END_Hi        235 
30     1 END       END_Lo        250 
30     2 END       END_Lo        245 

它认为这是您想要使用的情况faceting:

library(tidyverse)  

Phys_Data <- data.frame(stringsAsFactors=FALSE,
     Subject = c(6, 6, 9, 9, 14, 14, 26, 26, 28, 28, 29, 29, 2, 2, 16, 16, 19,
                 19, 27, 27, 31, 31, 32, 32, 8, 8, 13, 13, 20, 20, 24, 24, 25,
                 25, 30, 30),
        Time = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
                 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2),
   Condition = c("CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET",
                 "CET", "CET", "CET", "RES", "RES", "RES", "RES", "RES", "RES",
                 "RES", "RES", "RES", "RES", "RES", "RES", "END", "END", "END",
                 "END", "END", "END", "END", "END", "END", "END", "END", "END"),
    Response = c("CET_Hi", "CET_Hi", "CET_Lo", "CET_Lo", "CET_Hi", "CET_Hi",
                 "CET_Hi", "CET_Hi", "CET_Lo", "CET_Lo", "CET_Lo", "CET_Lo",
                 "RES_Hi", "RES_Hi", "RES_Lo", "RES_Lo", "RES_Hi", "RES_Hi",
                 "RES_Hi", "RES_Hi", "RES_Lo", "RES_Lo", "RES_Lo", "RES_Lo", "END_Lo",
                 "END_Lo", "END_Hi", "END_Hi", "END_Hi", "END_Hi", "END_Lo",
                 "END_Lo", "END_Hi", "END_Hi", "END_Lo", "END_Lo"),
   Leg_Press = c(212, 300, 350, 370, 330, 450, 180, 250, 230, 275, 330, 325,
                 142, 225, 280, 320, 205, 295, 175, 260, 340, 370, 310, 370,
                 205, 250, 310, 320, 200, 185, 260, 270, 210, 235, 250, 245)
)

Phys_Data %>%
  mutate(
    Time = as.factor(Time),
    Response = str_split_fixed(Response, "_", 2)[,2]
  ) %>%
  ggplot(aes(x=Time, y=Leg_Press, fill=Time)) +
    facet_wrap(~Condition, strip.position = "bottom") +
    geom_col(
      data = ~group_by(.x, Time, Condition) %>%
        summarize(Leg_Press = mean(Leg_Press)) %>%
        ungroup()
    ) +
    scale_fill_brewer(palette="Blues", name = "Time", labels = c("Pre", "Post")) +
    geom_point(aes(color=Response)) +
    geom_line(aes(color=Response, group=Subject)) +
    labs(title="Leg Press", x = "Condition", y ="Leg Press (kg)") +
    theme(
      axis.text.x = element_blank(),
      axis.ticks.x = element_blank()
    )

Created on 2019-09-04 by the reprex package (v0.3.0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将geom_bar、geom_point和geom_line组合成一张图? 的相关文章

  • PowerBI:如何保存R脚本的结果?

    是否可以在 Power BI Desktop 中实现以下场景 将数据从 Excel 文件加载到多个表 使用 R 脚本从多个数据源进行计算 将计算结果存储到 Power BI pbix 中的新表 这个想法是使用 Power BI Deskto
  • Mac OS Big Sur R 编译错误:ld:找不到 CoreFoundation 框架

    在我的 Xcode 自动更新到 12 4 后 我的 Rstudio 包编译中断并抛出以下错误 ld framework not found CoreFoundation collect2 error ld returned 1 exit s
  • 如何在 R 中使用 Torocks5 getURL

    我想使用 TorgetURLR Tor 中的功能正在工作 在 Firefox 中检查 socks5 at port 9050 但是当我在 R 中设置它时 出现以下错误 html lt getURL http www google com f
  • 检索每组的“倒数第二个”数据

    我想检索每组的 倒数第二个 数据 目前 代码如下 使用 group modify 两次 有没有可用的功能 如何简单地使用当前代码 谢谢 所希望的结果在附图中的红色矩形中 library dplyr test data lt data fra
  • R:如何检查向量元素是否相同

    gt dput ranks structure c NA NA 2L 2L NA NA NA 2L 1L Names c LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 LANG7 LANG8 LANG9 gt ra
  • 使用 dplyr 计算组平均值,同时排除当前观察值

    Using dplyr 最好 我试图计算每个观察值的组平均值 同时从组中排除该观察值 看来这应该可以通过组合来实现rowwise and group by 但这两个功能不能同时使用 给定这个数据框 df lt data frame grou
  • r 选择数据框中某个值以下和之后的值

    我有一个问题如何从表中选择某些值 我有一个包含时间和值的表 我想在特定时间之后获取下面的行 示例 Data Frame Time Value 02 51 0 08033405 05 30 0 43456738 09 45 0 3605207
  • 数据表中的最大行数

    我的 data table 中有一个包含 8 000 000 行 100 列的数据集 其中每列都是一个计数 我需要找到每行的最大计数以及该最大值位于哪一列 我可以使用以下命令快速获取每行的哪一列具有最大值 dt lt dt maxCol w
  • 更改 ggplot 对象的数据集

    我正在绘制数据的子集ggplot2我想知道我是否会以某种方式使用已包含在ggplot原始数据子集中的对象 举个例子 这是第一个图 代码块 1 require ggplot2 p lt ggplot mtcars aes mpg wt col
  • 按列名合并 3 个 data.frames

    我有3个独立的data frames 他们三个data frames具有相同的列数和相同的行数 此外 它们具有相同的列名称 我正在尝试根据列名称合并三个 data frames 我使用下面的代码来合并两个 data frames 并返回匹配
  • 如何根据R中的条件创建新变量

    我正在尝试根据某些条件创建一个新变量 我的数据看起来像 a b 1 NA 2 3 3 3 NA 2 NA NA 我想要的是一个变量c这样 when a is not NA b is NA c a when a is NA b is not
  • 从 R 中的数据框/矩阵中选择一列时保留列名称

    在R中 当我只从数据框 矩阵中选择一列时 结果将变成一个向量并丢失列名称 如何保留列名称 例如 如果我运行以下代码 x lt matrix 1 3 3 colnames x lt c test1 test2 test3 x 1 我会得到 1
  • 根据“df1”的一个变量(“df1$var1”)在“df1”中创建一个变量,并根据“df1$var1”创建一个可更改的“df2”变量

    我有数据框df1总结了一段时间内鱼的深度 df1 Site告诉你鱼所在的地点 df1 Ind告诉你个人和df1 Depth告诉您鱼在特定位置的深度df1 Datetime 另一方面 我有df2总结了一段时间内 每三小时 从表面到 39 米深
  • 将不规则时间序列拆分为规则月平均值 - R

    为了确定季节性对能源使用的影响 我需要将计费数据库中的能源使用信息与每月温度进行调整 我正在使用一个计费数据集 其中包含不同长度以及开始日期和结束日期的账单 并且我希望获得每个月内每个帐户的月平均值 例如 我有一个计费数据库 具有以下特征
  • 使用 markovchain 包计算观察序列的概率

    让我们使用来自的数据集这个问题 https stats stackexchange com questions 26722 calculate transition matrix markov in r dat lt data frame
  • 带有 rename_with 的 Purrr 地图

    我正在尝试清理数据集的名称 我用过janitor clean names 开始 但是 我仍然有缩写想用下划线分隔开 我有可以使用的代码rename with str replace x gh gh cols starts with gh 但
  • 如何在 ggplot2 图中有两个源标题? [复制]

    这个问题在这里已经有答案了 我正在尝试在 ggplot2 图中添加第二个标题 与这位经济学家制作此图的方式类似 这是我制作的一个基本图 我知道如何在右下角添加一个标题 但如何在左下角添加另一个标题 ggplot mtcars aes mpg
  • 通过 rpy2 将 numpy 数组传递给 R 时出现不一致数组

    我正在尝试将 numpy 数组传递到 R 中的 GAMLSS 包 import numpy as np import rpy2 robjects as robjects from rpy2 robjects import numpy2ri
  • rollapply 可以返回矩阵列表吗?

    我想使用滚动窗口生成协方差矩阵 和均值向量 但在我所有的尝试中rollapply堆叠协方差矩阵cov并且耗尽了预先分配的空间 例如 如果我的原始数据有 40 个观察值 那么rollapply不能返回超过 40 行 有什么方法可以让我得到ro
  • R 复平面上的多重根

    我一直在尝试找到一个返回方程的所有复数解的函数 例如 16 1 4 2 i0 2 i0 0 i2 0 i2 就目前情况而言 如果我输入16 1 4 进入控制台 它只返回 2 我可以为此编写一个函数 但我想知道在 R 中是否有一种简单的方法可

随机推荐