You need to enable JavaScript to run this app. 如何在ggplot2中绘制多个同色多边形 修复同色填充图形错乱问题
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2中绘制多个同色多边形 修复同色填充图形错乱问题

问题根因

geom_polygon的核心绘制逻辑为:将aes()中映射的非x/y类变量作为分组标识,同组的点会按数据存储顺序被连接为独立的闭合多边形。

  • 原正确绘制的代码中,fill=paste0(i)的设置让每个六边形的6个点对应唯一的序号值,相当于通过fill字段完成了分组识别,因此每个六边形都能被独立绘制。
  • 当所有点的fill值统一设为"red"后,所有六边形的点都被归为同一个分组,ggplot会把全部点按顺序串联成一个连通的大多边形,最终出现填充错乱的效果。
修复方案

核心调整逻辑:保留每个六边形的独立分组标识,将统一填充色移出aes映射作为全局固定参数。
具体修改步骤:

  1. 构造多边形数据时,单独存储每个六边形的唯一分组标识,不再用fill字段兼做分组功能:
    for (i in 1:length(hexagon$xl)){
      centerx = hexagon$xl[i]
      centery = hexagon$yl[i]
      radius = hexagon$radii[i]
      
      poly_hex <- data.table(
        x = c(centerx, centerx - sqrt(3)*radius/2, centerx - sqrt(3)*radius/2, 
              centerx, centerx + sqrt(3)*radius/2, centerx + sqrt(3)*radius/2),
        y = c(centery + radius,  centery + 1/2*radius, centery - 1/2*radius, 
              centery - radius, centery - 1/2*radius, centery + 1/2*radius),
        group = rep(i, 6), # 每个六边形对应的唯一分组ID
        fill = rep("red", 6) # 此处fill值不承担分组作用,可任意设置
      )
      poly = rbind(poly, poly_hex)
    }
    
  2. 调整ggplot层的映射配置:将fill设为aes外的固定参数,aes内通过group参数显式指定多边形的分组规则:
    ggplot() + 
      geom_polygon(data=poly, aes(x=x, y=y, group=group), fill = "red") + 
      theme(legend.position = "none") + 
      coord_fixed(ratio = 1) + 
      xlab("Independent Variable") + 
      ylab("Dependent Variable")
    

补充说明

  • 生成数据时可以完全删除fill字段,只要group列满足“每个六边形对应的6行数据取值唯一”的规则,即可正常绘制。
  • 调整填充色时,仅需修改geom_polygon内的fill参数值即可,不会再出现图形错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 10:06:03