r - 有没有办法制作一个将经验词对与 ggplot2 连接起来的线图?
问题描述
我不确定这种情节的正确名称是什么,但假设我们有一个名称列表(或此处的字母):data <- data.frame(letters[1:10])
我们还想说明这些名称中的哪些名称是基于一些经验决定连接的,所以我们有一个观察列表,我们想在如下图中连接(在 powerpoint 中完成):
这可以在ggplot中完成吗?
解决方案
是的,它可以在 ggplot 中完成。
让我们首先设置一个字母数据框,并在绘图的 x 和 y 轴上具有相关位置。我们将 x 值设为 1 和 2(尽管这是任意的),y 值设为 1:10(也是任意的,只要它们间隔均匀)
labels <- data.frame(x = c(rep(1, 10), rep(2, 10)),
y = rep(1:10, 2),
labs = rep(LETTERS[10:1], 2),
stringsAsFactors = FALSE)
现在我们还需要一些方法来决定要加入哪些字母。让我们通过一个简单的“左”和“右”值数据框来做到这一点,其中每一行描述将连接哪两个字母:
set.seed(69)
joins <- data.frame(left = sample(LETTERS[1:10], 6, TRUE),
right = sample(LETTERS[1:10], 6, TRUE),
stringsAsFactors = FALSE)
joins
#> left right
#> 1 A G
#> 2 B B
#> 3 H J
#> 4 G D
#> 5 G J
#> 6 F B
现在我们可以通过将这两列中的字母与labels
数据框中的列匹配来为行分配开始和结束 x 和 y 坐标:
joins$x <- rep(1.05, nrow(joins))
joins$xend <- rep(1.9, nrow(joins))
joins$y <- labels$y[match(joins$left, labels$labs)]
joins$yend <- labels$y[match(joins$right, labels$labs)]
这只是离开了情节。我们想去掉所有的坐标轴、标题和图例,所以我们使用theme_void
:
library(ggplot2)
ggplot(labels, aes(x, y)) +
geom_text(aes(label = labs), size = 8) +
geom_segment(data = joins, aes(xend = xend, yend = yend, color = left),
arrow = arrow(type = "closed", length = unit(0.02, "npc"))) +
coord_cartesian(xlim = c(0.5, 2.5)) +
theme_void() +
theme(legend.position = "none")
由reprex 包于 2020-07-10 创建(v0.3.0)
推荐阅读
- javascript - jQuery - 检查单击了哪个元素
- javascript - IIFE 的 this 是否总是指向全局对象?
- java - 使用 TextInputEditText 在 RecycleView 中遇到问题
- python - 在内部公司服务器上运行 Python Web 应用程序
- sql - 将字符连接并添加到 SQL 中的整数列
- c++ - union 给出了字符串数据类型的错误,但适用于 char 数据类型
- java - java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider 在 Eclipse 中执行 testrunner 类时
- css - CSS Paged Media:无法实现所需的中断行为(break-after,break-before什么都不做)
- amazon-web-services - 请求 quicksight 嵌入 URL 时,“'userArn' 未能满足约束:在此区域中无法访问指定的资源”
- python - 如何计算数据框组中行的唯一组合?