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

