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

时间:2018-07-01 04:30:34

标签: r ggplot2 plotly scatter-plot ggrepel

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

是否知道如何在clusterRggplot2中使用ggrepel来做到这一点?

这是示例数据(plotly坐标和XY分配在cluster中,标签在df中)和其中的label.df部分:

ggplot2

enter image description here

1 个答案:

答案 0 :(得分:3)

通过geom_label_repel()包中的ggrepel函数,您可以轻松地向图上添加标签,同时尝试“排斥”不与其他元素重叠的标签。对您现有代码的一点补充,我们在其中汇总数据/获取放置标签的位置的坐标(这里我选择了每个群集的左上角区域-这是x的最小值和y的最大值)并将其合并现有数据包含集群标签。在对geom_label_repel()的调用中指定此数据框,并在label中指定包含aes()美感的变量。

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))

Output