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

使用geom_path()时避免因子型颜色分箱值导致的线条间隙

解决geom_path按颜色分段时出现间隙的问题

我使用geom_path()结合十六进制颜色值绘制线条时遇到以下问题:当用数值型变量bins分配颜色分箱时,线条是连续的;但改用存储十六进制颜色的变量bins1时,不同颜色的线段之间出现了明显间隙。

原代码如下:

library(ggplot2)

df <- structure(list(x = c(0, 0.57, 0.43, -0.65, -2.27, -3.5, -3.39, 
-1.5, 1.75, 5.12, 7.01, 6.21, 2.55, -2.87, -7.97, -10.51, -9.02, 
-3.59, 4, 10.84, 14.01), y = c(0, 0.41, 1.33, 2, 1.64, -0.01, 
-2.48, -4.67, -5.32, -3.68, 0.03, 4.56, 8.01, 8.64, 5.71, -0.07, 
-6.66, -11.36, -11.96, -7.73, 0.13), bins = c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L), bins1 = c("#e2c207", "#e2c207", "#e2c207", "#e2c207", "#e2c207", 
"#e2c207", "#e2c207", "#ff6915", "#ff6915", "#ff6915", "#ff6915", 
"#ff6915", "#ff6915", "#ff6915", "#8b0d0d", "#8b0d0d", "#8b0d0d", 
"#8b0d0d", "#8b0d0d", "#8b0d0d", "#8b0d0d")), row.names = c(NA, 
21L), class = "data.frame")

ggplot(df, aes(x, y)) + 
  geom_path(aes(colour = bins1)) +
  scale_colour_identity() +
  coord_fixed() +
  theme_void()

绘图效果:
颜色分段线条出现间隙

我还尝试了以下方法,但问题仍然存在:

colours <- c("#e2c207", "#ff6915", "#8b0d0d")

ggplot(df, aes(x, y, colour = I(colours[bins]))) + 
  geom_path() +
  coord_fixed() +
  theme_void()

问题原因

geom_path()会自动根据colour变量进行分组,不同颜色的点会被分成独立的路径组,相邻组的端点之间不会自动连接,因此出现间隙。

解决方法

改用geom_segment()绘制每个线段,确保相邻点之间都被连接:

  1. 先构造线段数据,为每个点生成下一个点的坐标:
library(dplyr)

df_seg <- df %>%
  mutate(
    xend = lead(x),  # 获取下一个点的x坐标
    yend = lead(y)   # 获取下一个点的y坐标
  ) %>%
  filter(!is.na(xend))  # 移除最后一行(无下一个点)
  1. 使用geom_segment()绘制线段,每个线段使用起始点的颜色:
ggplot(df_seg, aes(x, y, xend = xend, yend = yend)) +
  geom_segment(aes(colour = bins1), linewidth = 1) +
  scale_colour_identity() +
  coord_fixed() +
  theme_void()

这样绘制出的线条就不会有间隙,同时保持各段的颜色区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:38