如何使用ggplot在散点图中按区域绘制多边形同时按国家分配点颜色
问题原因
你修改后输出不符合预期的核心原因是绘图美学映射与凸包分组逻辑不匹配:你将凸包生成分组改为region后,ggplot全局设置的colour=country_name、fill=country_name会被geom_polygon继承,导致按区域计算的凸包仍被强制按国家拆分绘制,自然无法得到按区域聚合的多边形。
chull函数逻辑说明
chull()是R内置的凸包计算函数,输入两组坐标向量x、y,会返回构成凸包边界的点在原数据中的行索引,返回的点按顺序连接即可形成能包裹所有输入点的最小凸多边形。
实现代码
第一步:按区域维度生成凸包数据
find_hull <- function(df) df[chull(df$x, df$y), ] # 按region分组计算每个区域的凸包 hulls_region <- ddply(df, "region", find_hull)
第二步:分层设置映射绘制图形
注意将点和多边形的美学映射分开设置,避免全局映射互相干扰:
ggplot(data = df, aes(x = x, y = y)) + # 散点单独按国家着色 geom_point(aes(colour = country_name)) + # 凸包单独按区域填充,可按需调整透明度 geom_polygon(data = hulls_region, aes(fill = region), alpha = 0.3)
如果需要凸包边框也对应区域颜色,可在geom_polygon的aes中添加colour = region参数即可。
内容的提问来源于stack exchange,提问作者cornel
相关产品推荐
相关产品推荐

