如何将position_dodge()和geom_line()与重叠分组结合起来?

2023-12-07

当 x 轴上的分组变量、颜色和线条重叠但总是不同时,是否可以使用 geom_line() 在躲避点之间绘制一条线?

下图中的灰线应该始终连接两个具有相同名称的数据点,它们位于相同的分组 2(x 轴)内,但位于不同的分组 2(颜色)中。

可重现的例子:

library(tidyverse)

tbl = tibble(name = rep(paste("name", 1:12), each = 2), 
             grouping1 = rep(c("A", "B"), 12),
             grouping2 = c(rep("X", 8), rep("Y",8), rep("Z",8)),
             value = 1:24)

enter image description here

tbl %>%
  ggplot(aes(x = grouping2, y = value, color = grouping1)) +
    geom_line(aes(group = name),position= position_dodge(0.5), color = "grey44") +
    geom_point(position = position_dodge(0.5)) 

enter image description here

对于我的具体示例,有一些或多或少的黑客方法可以解决这个问题,例如使用 geom_segment() 作为线条并将 x 轴 grouping2 转换为数字或组合 x 轴上的两个分组(如 grouping1 和 grouping2)。

因此,我的问题是是否有一个clean怎样才能达到想要的剧情?

有一些相关的问题,例如将position_dodge与geom_line结合使用,但它们并不完全相同。


实现所需结果的一种选择是将 x 轴变量转换为数字并手动调整位置,而不是使用position_dodge:

library(tidyverse)

tbl = tibble(name = rep(paste("name", 1:12), each = 2), 
             grouping1 = rep(c("A", "B"), 12),
             grouping2 = c(rep("X", 8), rep("Y",8), rep("Z",8)),
             value = 1:24)

width <- .125

tbl1 <- tbl %>%
  mutate(grouping2 = factor(grouping2),
         x = as.numeric(grouping2) + width * if_else(grouping1 == "A", -1, 1))

breaks <- unique(as.numeric(tbl1$grouping2))
labels <- unique(tbl1$grouping2)

ggplot(tbl1, aes(x = x, y = value, color = grouping1)) +
  geom_line(aes(group = name), color = "grey44") +
  geom_point() +
  scale_x_continuous(breaks = breaks, labels = labels)

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

如何将position_dodge()和geom_line()与重叠分组结合起来? 的相关文章

  • 绘图中的 R 科学记数法

    我有一个简单的情节 usr bin Rscript png plot png y lt c 102 258 2314 x lt c 482563 922167 4462665 plot x y dev off R 使用 500 1000 1
  • 使用 tidymodel 运行多个回归模型

    我最近一直在使用 tidymodels 来运行模型并选择最能满足某些目标函数的参数 例如 对 mtcars 数据使用假设回归 使用此问题底部答案中的回归示例作为示例 https stackoverflow com questions 241
  • merge.zoo 删除时区

    的结果merge zoo与其输入的时区不同 考虑下面的例子 library zoo zoo a zoo data frame a 1 5 seq as POSIXct 2014 01 01 00 00 01 tz UTC as POSIXc
  • R 使用 dplyr 将列移动到最后

    对于 data frame 来说n列 我希望能够从任何列移动列1 n 1 位置 成为第 n 列 即非最后一列成为最后一列 我也想使用dplyr 我想这样做而不是简单地键入所有列的名称 例如 data lt data frame a 1 5
  • 如何在变成因子的变量中保留原始值?

    这是一些工作代码来说明我的问题 Categorical variable recorded as numeric integer df1 lt data frame group c 1 2 3 9 3 2 9 1 9 3 2 我有一个分类变
  • 即使设置了语言环境,data.frames中的藏文字符也无法在R控制台中显示(中文可以,矩阵中的藏文可以)

    在 R 中 藏文字符位于 data frames 中时无法正确显示 gt Sys setlocale LC CTYPE Tibetan 1 Tibetan China 950 gt data frame a a 1
  • 条件格式 DT 中的样式

    我想根据 B 列中的值对 A 列中的行进行着色 下面的代码基于小插图中的示例Link https rstudio github io DT 010 style html 但仅显示两列的条件 mobile number by mobile f
  • 泛化 R %in% 运算符以匹配元组

    前几天我花了一段时间寻找一种方法来检查行向量是否包含在 R 中的某些行向量集中 基本上 我想概括 in 运算符来匹配元组而不是向量中的每个条目 例如 我想要 row vec c A 3 row vec 1 A 3 data set rbin
  • (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 参数暗示不同的行数: 1, 4, 5, 2

    我是 R 的初学者 我希望你能帮助我解决我的问题 我的数据集中的文件名包含大量信息 我必须提取这些信息来创建单独的变量 首先我使用 splits lt t as data frame strsplit as character rawdat
  • 具有重复值的两个向量之间的“设置差异”

    我有 3 个向量 x lt c 1 3 5 7 3 8 y lt c 3 5 7 z lt c 3 3 8 我想找到以下元素x那些不在y并且不在z 有没有一个功能f这会给我以下输出 gt f x y 1 3 8 gt f x z 1 5 7
  • 字符串的 gnuplot 图

    是否可以传递字符串中的绘图数据 我的意思是做这样的事情 plot 09 13 2010 2263 80 09 14 2010 2500 using 1 2 with lines 可以做类似的事情 set xdata time set tim
  • a * b * y 中的错误:不一致的数组[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 Cold lt matrix c 1 89 3 76 2 47 4 76 2 2 byrow TRUE X lt mat
  • 如何在R中用随机数填充矩阵?

    expand grid i rexp 5 rate 0 1 它只创建一列 但有什么方法可以轻松地将其乘以 5 列吗 我的意思是 matlab 的做事方式 比如rand exp 0 1 10 20 创建一个指数分布随机数的矩阵 平均值为 0
  • 将表达式捕获为 R 中的函数体

    我正在尝试编写一个程序 该程序将表达式作为输入并返回一个以该表达式绑定作为其主体的函数 caller lt function expr params Function lt function params body env parent f
  • 使用 R 将多个数据帧写入 .csv 文件

    我使用 lapply 将函数应用于多个数据框 data cleaned lt lapply data list shooter cleaning 然后根据主题编号 例如 100 标记列表中每个结果数据帧 names data cleaned
  • Foreach Parallel - 多个输出的组合功能

    我有一组 45000 个用户和 40 多部电影的评分 我需要根据每个用户与其他用户的皮尔逊相关性来预测每个用户的新评分 我还需要存储相似用户的集合以及每个用户 电影组合的相似性 我使用 foreach 包并行执行循环 我设法编写的代码是这样
  • 提取数据框中值前后的 n 行

    我有一个数据框 其中包含某些值Mark柱子 我想提取n标记出现之前和之后的值 包括带有标记的行 我通过使用找到我需要的值indices lt which df Mark 1 where 1是我正在寻找的价值 现在我需要例如之前 5 行和之后
  • 通过在 R 中填充 NA - 使栅格达到相同程度

    我有几个具有不同几何形状 轮廓的裁剪栅格 具体而言 同一田地的几年的空间产量图 但范围有所不同 测量并不总是整个田地的整体 但在某些年份只是其中的一部分 我想计算这些地图的平均值并将它们组合成一个平均值栅格 然而 这确实意味着 假设 5 层
  • R 热图中的颜色标签(文本)

    我正在尝试在 R 中制作一个热图 其中标签文本是彩色的 以指示数据点来自哪个组 我目前正在使用 heatmap 2 但很乐意使用另一个包 heatmap 2 data matrix data trace none dendrogram no
  • 有人可以解释一下这段代码吗?尤其是“函数x和[[x]]”的作用?

    这是 R 中的代码 我无法理解其作用function x and qdata x 在这行代码中 有人能给我详细解释一下吗 这段代码不是我写的 谢谢 outs lapply names qdata 12 35 function x hist

随机推荐