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

T-SNE图添加凸包失败排查:R语言ggplot实现问题

解决ggplot添加T-SNE聚类凸包失败的问题

我帮你排查了下代码里的问题,主要有这几个点导致凸包没成功添加:

  • 数据映射不匹配:你在stat_chull里直接引用了iris_unique$Species,但ggplot当前绑定的数据集是tsne_plot,应该用该数据集中的col列(这列已经对应了物种信息)。直接外部引用其他数据集的列会导致数据上下文不匹配,容易引发绘制错误。
  • 缺少分组参数:绘制分组凸包需要明确指定分组依据,否则stat_chull会把所有点当成一个整体处理,没法生成每个聚类组的独立凸包。需要在aes里添加group = col来按物种分组。
  • 美学映射不一致:geom_point用的是color=col,stat_chull里也应该统一使用col而非外部的iris_unique$Species,保持图层间美学映射的一致性。

下面是修正后的代码:

library(ggplot2)
library(Rtsne)

iris_unique <- unique(iris) # 去除重复值
iris_matrix <- as.matrix(iris_unique[,1:4])
set.seed(42) # 设置随机种子以保证结果可复现
tsne_out <- Rtsne(iris_matrix) # 运行T-SNE
tsne_plot <- data.frame(x = tsne_out$Y[,1], y = tsne_out$Y[,2], col = iris_unique$Species)

ggplot(tsne_plot) + 
  geom_point(aes(x=x, y=y, color=col)) + 
  stat_chull(aes(x=x, y=y, group = col, color = col, fill = col), 
             geom = "polygon", alpha = 0.1)

修正说明:

  1. 在stat_chull的aes里明确指定了x和y映射(虽可继承上层映射,但明确写出更清晰);
  2. 添加group = col实现按物种分组生成凸包;
  3. 统一使用数据集内的col列作为颜色和分组依据,避免跨数据集引用的问题;
  4. 调整代码换行,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:23:12