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

如何使用ggforce的geom_link生成类似水平条形图的矩形路径?

问题原因

你当前运行代码得到的路径两端收窄,是因为你将size参数映射到了stat(index)。stat(index)是ggforce为geom_link提供的内置统计量,会沿连线路径从起点到终点取值从0线性递增到1,这就导致线段的粗细从两端向中间逐渐变大,最终呈现两端收窄的效果。


解决方法

方法1:保留geom_link,调整映射逻辑

如果不需要沿路径的大小渐变,直接固定size即可,也可以仅保留透明度渐变,修改后的代码如下:

ggplot(ex_data) +
  geom_link(aes(x = x, xend = xend, y = id, yend = id, colour = colour,
                alpha = stat(index)), # 仅保留透明度渐变,也可以直接删掉该行固定alpha
            size = 8, # 固定线段粗细,数值可根据需求调整
            show.legend = FALSE) +
  scale_colour_manual(values = ex_data$colour)

方法2:使用geom_rect实现标准矩形条

如果需要和常规水平条形图完全一致的矩形效果,更推荐用原生的geom_rect实现,本身就是矩形结构不会出现收窄问题:

ggplot(ex_data) +
  geom_rect(aes(xmin = pmin(x, xend), xmax = pmax(x, xend), # 自动处理x和xend的大小关系
                ymin = as.numeric(id) - 0.4, ymax = as.numeric(id) + 0.4, # 控制矩形高度
                fill = colour),
            alpha = 0.8,
            show.legend = FALSE) +
  scale_fill_manual(values = ex_data$colour)

内容的提问来源于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:39:02