R ggplot2绘图中如何仅在每n个数据点处添加路径方向箭头
解决代码
你可以直接修改箭头对应图层的数据源处理逻辑,修改后可运行的完整代码如下:
library(tidyverse) x <- seq(from = -100, to = 100, by = 0.01) y <- x^3 - 2 * x + x df<- data.frame(x,y) df$t<- seq(1:nrow(df)) ggplot(data = df, aes(x = x, y = y)) + geom_path(size = 0.1, aes(colour = t)) + # 仅修改箭头图层的处理逻辑即可 geom_path(aes(colour = t), data = . %>% # 标记需要添加箭头的位置 mutate(is_arrow = row_number() %% 2000 == 0) %>% # 保留箭头点和它的前一个相邻点,用来生成极短的路径段 filter(is_arrow | lag(is_arrow, default = F)) %>% # 每两个点为一组,每组单独绘制短路径 group_by(grp = cumsum(is_arrow)) %>% # 过滤掉边界可能出现的不完整分组 filter(n() == 2), arrow = arrow(type = 'open', angle = 30, length = unit(0.1, "inches")))
逻辑说明
- 所有数据处理都在ggplot图层的管道内完成,不需要额外生成全局数据框,可兼容你已有的其他过滤规则
- 每个箭头对应仅包含两个点的短路径:箭头所在点和它的前一个相邻点,路径长度极短几乎不可见,只会显示末尾的箭头标记,不会出现跨多个采样点的长直线
- 箭头方向完全和原路径的走向一致,不需要自定义静态符号
内容的提问来源于stack exchange,提问作者Esme_
相关产品推荐
相关产品推荐

