如何在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
相关产品推荐
相关产品推荐

