脚本的预期结果:
我正在尝试从一张纸上绘制的eclust中获取多个聚类图,但是无法使用多种方法来完成。
#install.packages("gridExtra")`
#install.packages("factoextra")`
#install.packages("eclust")`
#install.packages("ggplotify")`
require(gridExtra)
library(grid)
library(lattice)
library(factoextra)
library(ggplotify)
#KMEANS -----------------------------
km <- eclust(tsne_df, "kmeans", k = NClust)
km.sil <- fviz_silhouette(km)
#PAM CLUSTERING ---------------------
pam <- eclust(tsne_df, "pam", k = NClust)
pam.sil <- fviz_silhouette(pam)
#METHOD_1
grid.arrange(grob(km), grob(pam), ncol=2)
#METHOD_2
multiple_plot <- arrangeGrob(grob(km), grob(pam), nrow = 2, ncol = 1)
print(multiple_plot)
#METHOD_3
def.par <- par(no.readonly = TRUE)
par(oma=c(0,0,3,0))#set top margin to have more space
par(mfrow=c(2,2))
par(mar=c(5,4,4,2)+0.1)
par(cex.axis = .7)
eclust(tsne_df, "kmeans", k = NClust)
fviz_silhouette(km)
eclust(tsne_df, "pam", k = NClust)
fviz_silhouette(pam)
我希望从这两种方法中得到4个具有2个聚类图和2个显示轮廓图的图,总计为2x2的网格。但是,它们似乎都不适合与eclust绘图配合使用,因为它们是不同的对象类型,即使将其转换为gList类型也仍然无法使用。我是R的新手,无法弄清楚它的替代方法是什么。请在下面找到显示期望结果的链接,这些链接是我在InDesign中手动汇总的。
答案 0 :(得分:1)
我遇到了同样的问题(希望绘制35个fviz_silhouette图),并使用了plot_grid
软件包中的cowplot
函数来解决了这个问题。
在您的情况下,可能是这样的(我不确定2 x 2图的左侧在您的示例中来自何处,因此我添加了fviz_cluster函数):
install.packages("cowplot")
library(cowplot)
# KMEANS -----------------------------
km <- eclust(tsne_df, "kmeans", k = NClust)
km.clus <- fviz_cluster(km)
km.sil <- fviz_silhouette(km)
# PAM CLUSTERING ---------------------
pam <- eclust(tsne_df, "pam", k = NClust)
pam.clus <- fviz_cluster(pam)
pam.sil <- fviz_silhouette(pam)
# PLOT -------------------------------
list.plot <- list() #list to store the plots
list.plot[[1]] <- km.clus
list.plot[[2]] <- km.sil
list.plot[[3]] <- pam.clus
list.plot[[4]] <- pam.sil
plot_grid(plotlist = list.plot, ncol = 2)
希望它对您或其他有此问题的人有用。