r - 如何使用 ggplot2 在绘图中添加线条
问题描述
我正在尝试使用 ggplot (或base R)以一种简单的方式制作这样的情节
这个想法是将暗线视为一个组,在两个子组(CAP 和 NC)之间有间隙,并且还放置第二个 x 实验室来标记时间(如您所见,时间 0,15 和 240 是常见的两组)。
谢谢你的帮助,
编辑:这里有一个例子。
db0 <- structure(list(t = c(0, 5, 15, 30, 60, 0, 15, 60, 0, 5, 15,
30,60, 0, 15, 60), g = c("C", "C", "C", "C", "C", "N", "N", "N",
"C", "C", "C", "C", "C", "N", "N", "N"), v = c("T1", "T1", "T1",
"T1", "T1", "T1", "T1", "T1", "T2", "T2", "T2", "T2", "T2", "T2",
"T2", "T2"), y = c(10, 12, 15, 25, 33, 10, 13, 11, 11, 20, 28,
14, 10, 11, 11, 12), x = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L)), row.names = c(NA, -16L), class =
"data.frame")
db0$x <- rep(1:8, length.out=16)
library(ggplot2)
ggplot(db0, aes(x=as.factor(x), y=y, group=g, color=v)) +
geom_path() +
geom_point() +
scale_x_discrete(labels=c("1" = "0", "2" = "5", "3" = "15", "4" = "30",
"5" = "60", "6" = "0", "7" = "15", "8" = "60"))
这里的问题是如何以简单的方式绘制此图,而不创建 x 变量和更改 x-lab 名称,而是使用 ggplot2 命令。此外,geom_path 存在问题,它将一组的结尾与以下组的开头联系起来。
解决方案
- 用于
group = interaction(g, v)
防止线路连接。 - 我认为您可以使用
facet_grid
来获得类似的结果。
顺便说一句,我在x=t
这里使用来获取 x 轴的实际值,而不是尝试将其与序数等进行映射。
ggplot(db0, aes(x=t, y=y, group=interaction(g, v), color=v)) +
geom_path() +
geom_point() +
facet_grid(. ~ g, space = "free_x")
我space="free_x"
在这里添加是为了尝试让右侧的 x 轴进行压缩,这时我注意到左侧和右侧的 x 范围是相同的......理论上,如果它们不同,则每个的大小窗格可能是成比例的。(见https://stackoverflow.com/a/10455381/3358272)
您需要进行一些格式化/标记才能获得所需的“CAP”和“NC”标签。
如果您需要相似的 x 范围但不同的宽度,那么您可能需要调整其中一个组的 x 轴,然后以某种方式附加一个贴标机来区分两组。
第三种选择是生成两个单独的图(使用不同的 x 轴控件)并使用类似的包patchwork
将它们与不同的宽度组合在一起。
推荐阅读
- mysql - 为使用 MySql 8 排序的当前日期分配“优先级”值
- unity3d - 如何不绕过对撞机团结
- matlab - MATLAB 匹配列/表
- bash - Substrate rust 开发者环境错误
- javascript - 如何在输入上添加 var 对象使用事件?
- php - 在 xampp 和公共上运行 magento
- c# - 如何为需要实例成员的方法正确创建 Helper 或不同的类?
- android - lateinit 属性绑定尚未初始化 / Kotlin
- c# - 从授权要求处理程序中的请求正文中读取会中断路由
- sparql - 如何从 sparql-query 中排除某些项目?