我正在使用fviz_cluster
来绘制通过kmeans
函数获得的kmeans结果。
下面,我要报告“ factoextra”软件包指南中的示例。
data("iris")
iris.scaled <- scale(iris[, -5])
km.res <- kmeans(iris.scaled, 3, nstart = 25)
fviz_cluster(km.res, data = iris[, -5], repel=TRUE,
ellipse.type = "convex")
键入此命令,您可能会观察到三个群集,每个群集具有不同的颜色。但是,对于每种颜色,我都希望固定相同的颜色,但椭圆的线型会有所不同。你知道怎么做吗?
答案 0 :(得分:2)
一种解决方案是使用从fviz_cluster()
获得的数据,通过使用ggplot
来构建自定义绘图。
基本上,您只需要访问每个新点的x,y坐标以及有关聚类的信息,即可重新创建图。
首先保存fviz_cluster()
中用于绘图的数据,然后可以使用chull()
查找每个簇的凸包,然后进行绘图。
library(ggplot2)
library(factoextra)
# your example:
iris.scaled <- scale(iris[, -5])
km.res <- kmeans(iris.scaled, 3, nstart = 25)
p <- fviz_cluster(km.res, data = iris[, -5], repel=TRUE,
ellipse.type = "convex") # save to access $data
# save '$data'
data <- p$data # this is all you need
# calculate the convex hull using chull(), for each cluster
hull_data <- data %>%
group_by(cluster) %>%
slice(chull(x, y))
# plot: you can now customize this by using ggplot sintax
ggplot(data, aes(x, y)) + geom_point() +
geom_polygon(data = hull_data, alpha = 0.5, aes(fill=cluster, linetype=cluster))
当然,现在您可以更改轴标签,添加标题,并根据需要在每个点添加标签。
以下示例可能更符合您的需求:
ggplot(data, aes(x, y)) + geom_point() +
geom_polygon(data = hull_data, alpha=0.2, lwd=1, aes(color=cluster, linetype=cluster))
linetype
更改每个群集的行,您需要使用lwd
使其更粗,也最好删除fill
参数,而使用color
。