将文本注释添加到聚类散点图 (tSNE)

Adding text annotation to a clustering scatter plot (tSNE)

我有 XY 数据(二维 tSNE 高维数据嵌入),我想 scatter plot。数据被分配给几个 cluster,所以我想用 cluster 对点进行颜色编码,然后为每个 cluster 添加一个标签,其颜色编码与clusters,并且位于 cluster 点之外(尽可能)。

知道如何在 ggplot2ggrepelplotly 中使用 R 来做到这一点吗?

这是示例数据(XY 坐标和 cluster 赋值在 df 中,标签在 label.df 中)和 ggplot2 部分它:

library(dplyr)
library(ggplot2)
set.seed(1)
df <- do.call(rbind,lapply(seq(1,20,4),function(i) data.frame(x=rnorm(50,mean=i,sd=1),y=rnorm(50,mean=i,sd=1),cluster=i)))
df$cluster <- factor(df$cluster)

label.df <- data.frame(cluster=levels(df$cluster),label=paste0("cluster: ",levels(df$cluster)))

ggplot(df,aes(x=x,y=y,color=cluster))+geom_point()+theme_minimal()+theme(legend.position="none")

ggrepel 包中的 geom_label_repel() 函数允许您轻松地向绘图添加标签,同时尝试 "repel" 标签不与其他元素重叠。对您现有代码的轻微补充,我们总结数据/获取标签放置位置的坐标(这里我选择了每个集群的左上角区域 - 这是 x 的最小值和 y 的最大值)并合并它使用包含集群标签的现有数据。在对 geom_label_repel() 的调用中指定此数据框,并在 aes().

中指定包含 label 审美的变量
library(dplyr)
library(ggplot2)
library(ggrepel)

set.seed(1)
df <- do.call(rbind,lapply(seq(1,20,4),function(i) data.frame(x=rnorm(50,mean=i,sd=1),y=rnorm(50,mean=i,sd=1),cluster=i)))
df$cluster <- factor(df$cluster)

label.df <- data.frame(cluster=levels(df$cluster),label=paste0("cluster: ",levels(df$cluster)))
label.df_2 <- df %>% 
  group_by(cluster) %>% 
  summarize(x = min(x), y = max(y)) %>% 
  left_join(label.df)

ggplot(df,aes(x=x,y=y,color=cluster))+geom_point()+theme_minimal()+theme(legend.position="none") +
  ggrepel::geom_label_repel(data = label.df_2, aes(label = label))