如何在coord_polar极坐标中绘制多边形区域展示聚类数据?
极坐标下聚类曲面展示需求与实现示例
我正在开展一项调研工作,调研数据可以通过极坐标(由距中心的距离与角度定义)以类地图的形式直观展示。但部分数据不适合以单点呈现,需要将同一变量标识的四个及以上的点,通过它们的位置和角度定义出一个曲面(类似常规聚类效果)来展示。
在本次示例中,我希望把所有标记为"Qu"的点归为同一曲面进行展示,目前仅关注图形呈现效果,曲面的计算逻辑可以单独处理。
原始点图代码
library(ggplot2) Azimut<-c(30,60,90,270,275, 45, 135, 45, 180) Distance<-c(3,6,12,16,22, 4, 16, 18, 18) CHR<-c(12,19,55,7,39,34,32,34,32) Spe1<-c("Eu","Pi","Qu","Qu","Ol", "Qu", "Qu", "Qu", "Qu") Tr1<-data.frame(Azimut,Distance, CHR, Spe1) Tr1$Theta<-2*pi*Azimut/360 # 极坐标点图 ggplot(aes(x = Azimut, y = Distance), data = Tr1) + geom_hline(aes(yintercept = 6)) + geom_hline(aes(yintercept = 18)) + scale_x_continuous(limits = c(0, 360), breaks = seq(0, 360, 45)) + scale_y_continuous(limits = c(0, 18), breaks = seq(0, 18, 6)) + # 修正原代码中breaks参数的不合理设置 geom_point(aes(size=CHR, fill=factor(Spe1)), shape=21, alpha=0.7)+ coord_polar(theta = "x")
原始点图效果

实现"Qu"类曲面展示的修改代码
要实现同一类别点的曲面展示,可使用geom_polygon将"Qu"类的点按角度排序后连成闭合曲面,同时保留其他点的展示:
library(ggplot2) Azimut<-c(30,60,90,270,275, 45, 135, 45, 180) Distance<-c(3,6,12,16,22, 4, 16, 18, 18) CHR<-c(12,19,55,7,39,34,32,34,32) Spe1<-c("Eu","Pi","Qu","Qu","Ol", "Qu", "Qu", "Qu", "Qu") Tr1<-data.frame(Azimut,Distance, CHR, Spe1) Tr1$Theta<-2*pi*Azimut/360 # 筛选并排序Qu类数据(按角度排序,避免曲面绘制时出现交叉线条) qu_data <- Tr1[Tr1$Spe1 == "Qu", ] qu_data <- qu_data[order(qu_data$Azimut), ] # 极坐标曲面+点图 ggplot() + # 绘制Qu类半透明曲面 geom_polygon(data = qu_data, aes(x = Azimut, y = Distance), fill = "#619CFF", alpha = 0.3) + # 绘制所有数据点 geom_point(data = Tr1, aes(x = Azimut, y = Distance, size = CHR, fill = factor(Spe1)), shape = 21, alpha = 0.7) + # 辅助线与坐标轴设置 geom_hline(aes(yintercept = 6)) + geom_hline(aes(yintercept = 18)) + scale_x_continuous(limits = c(0, 360), breaks = seq(0, 360, 45)) + scale_y_continuous(limits = c(0, 18), breaks = seq(0, 18, 6)) + # 统一填充色,保证曲面与对应点颜色一致 scale_fill_manual(values = c("Eu" = "#F8766D", "Pi" = "#00BA38", "Qu" = "#619CFF", "Ol" = "#C77CFF")) + coord_polar(theta = "x")
关键说明
- 对"Qu"类数据按角度排序是必要步骤,能避免曲面绘制时出现交叉错乱的线条
- 半透明曲面既突出聚类效果,又不会完全遮挡下方的数据点
- 手动设置填充色,保证曲面颜色与对应类别的点填充色统一
内容的提问来源于stack exchange,提问作者Antonello Salis
相关产品推荐
相关产品推荐

