You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在geom_link中根据xend与x的差值对路径进行排序

实现方法

核心原理:ggplot2默认按照数据集的行顺序绘制几何元素,先绘制的元素会位于图层底层,后绘制的位于上层。你只需要提前将数据集按x_diff从小到大排序,即可让负差值线段先绘制在最下方,正差值最大的线段最后绘制在最上方。

完整修改后代码

library(tidyverse)
library(ggforce)

ex_data <- data.frame(
  id = letters[1:16],
  x = c(9.17, 11.81, 0.95, 5.61, 2.52, 1.78, 1.44, 2.40, 5.14, 8.25, 6.65, 4.44,
        2.71, 2.35, 2.20, 6.76),
  xend = c(3.87, 10.75, 6.82, 10.11, 3.67, 4.28, 4.99, 2.69, 7.01, 4.90, 8.64,
           1.48, 0.20, 0.32, 2.16, 4.55),
  colour = c("#97233f", "#241773", "#0b162a", "#fb4f14", "#002244", "#002244",
             "#203731", "#000000", "#002244", "#008e97", "#4f2683", "#203731",
             "#004953", "#000000", "#002244", "#aa0000")
)

ex_data$x_diff <- ex_data$xend - ex_data$x

# 仅需新增这一步:按x_diff从小到大排序数据集
ex_data_sorted <- ex_data %>% arrange(x_diff)

ggplot(ex_data_sorted) +
  geom_link(aes(x = x, xend = xend, y = id, yend = id, colour = colour,
                alpha = stat(index)), show.legend = FALSE, size = 5, n = 500) +
  scale_colour_identity()

补充说明

如果后续需要调整层级顺序,比如让负差值线段显示在最上方,只需要把排序逻辑改为按x_diff降序排列即可:

ex_data_sorted <- ex_data %>% arrange(desc(x_diff))

内容的提问来源于stack exchange,提问作者user13973103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:57:04