如何在ggplot2中绘制多个同色多边形 修复同色填充图形错乱问题
问题根因
geom_polygon的核心绘制逻辑为:将aes()中映射的非x/y类变量作为分组标识,同组的点会按数据存储顺序被连接为独立的闭合多边形。
- 原正确绘制的代码中,
fill=paste0(i)的设置让每个六边形的6个点对应唯一的序号值,相当于通过fill字段完成了分组识别,因此每个六边形都能被独立绘制。 - 当所有点的fill值统一设为"red"后,所有六边形的点都被归为同一个分组,ggplot会把全部点按顺序串联成一个连通的大多边形,最终出现填充错乱的效果。
修复方案
核心调整逻辑:保留每个六边形的独立分组标识,将统一填充色移出aes映射作为全局固定参数。
具体修改步骤:
- 构造多边形数据时,单独存储每个六边形的唯一分组标识,不再用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) } - 调整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
相关产品推荐
相关产品推荐

