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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:50:32