【问题标题】:Adding text annotation to a clustering scatter plot (tSNE)将文本注释添加到聚类散点图 (tSNE)
【发布时间】:2018-12-09 18:01:49
【问题描述】:

我有XY 数据(二维tSNE 嵌入高维数据),我想scatter plot。数据分配给几个clusters,所以我想用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")

【问题讨论】:

    标签: r ggplot2 plotly scatter-plot ggrepel


    【解决方案1】:

    ggrepel 包中的geom_label_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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2021-10-18
      相关资源
      最近更新 更多