r - 是否可以根据注释而不是聚类结果为 kmeans 结果着色?
问题描述
我已经标记了数据,我想估计聚类结果是否与这些标签一致。在层次聚类中,我可以使用:
pheatmap(data,annotation_col=metadata,annotation_row=metadata,annotation_colors=anno_colors)
是否有可能也有kmeans
结果?我试过fviz_cluster
了,但我找不到如何根据注释而不是集群为每个点着色。
解决方案
我没有找到如何使用 fviz_cluster 在一个图中将已知标签与 kmeans 聚类结果进行比较。相反,我根据它们的标签为点着色,并根据它们的簇来塑造这些点。
iris.scaled <- scale(iris[, 1:4])
pc <- prcomp(iris.scaled)
km <- kmeans(iris.scaled, 3, nstart = 100)
pca.var <- pc$sdev^2
pca.var.per <- round(pca.var/sum(pca.var)*100, 1)
# Color according to iris$Species
typeSp<-as.vector(iris$Species)
colvec<-typeSp
colvec[is.element(typeSp,"setosa")] = "red"
colvec[is.element(typeSp,"versicolor")] = "blue"
colvec[is.element(typeSp,"virginica")] = "magenta"
# Shape according to kmeans cluster
typeCl<-km$cluster
pchvec<-1:length(colvec)
pchvec[is.element(typeCl,1)] = 0
pchvec[is.element(typeCl,2)] = 19
pchvec[is.element(typeCl,3)] = 17
plot(pc$x[,1], pc$x[,2], col=colvec, pch=pchvec,
xlab = paste("PC1 (",pca.var.per[1],"%)"),
ylab = paste("PC2 (",pca.var.per[2],"%)"),
main="Compare known label (colors) to Kmeans cluster (shapes)")
legend("topright",legend=c("setosa","versicolor","virginica"),
col=c("blue","red","magenta"),
cex=0.9, pch=c(8,8,8))
推荐阅读
- eigen - 特征图原始缓冲区
- google-apis-explorer - Google Photos API,pageSize 参数未返回预期结果
- android - 使用 setOnNavigationItemSelectedListener 时,波纹效果 BottomNavigationView 冻结
- javascript - 尝试遍历 Map 元素时出现 TypeError
- webdriver-io - 旧步骤定义保留在 WDIO Allure 报告中
- php - PHP套接字包数据
- ubuntu - 在 localhost (Ubuntu14.1) 中使用 NGINX 服务器托管多个网站
- corda - 在corda的api文件中状态为散列的值的类型是什么?
- javascript - 无法将属性读取为未定义的小写
- ios - 科尔多瓦应用程序中缺少框架的 Info.plist 文件