dan*_*dan 5 r scatter-plot ggplot2 plotly ggrepel
我有我想要的XY数据(tSNE高维数据的 2D嵌入)scatter plot。数据被分配给几个clusters,所以我想对点进行颜色编码cluster,然后为每个点添加一个标签cluster,该标签与clusters具有相同的颜色编码,并且位于(尽可能)从cluster的点。
任何想法如何做到这一点使用R在任ggplot2和ggrepel或plotly?
这是示例数据(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")
Run Code Online (Sandbox Code Playgroud)
包中的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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |