我想在一个图(具有相同数据)中显示几个透明的叠加的“ fviz_cluster”图:
library(ggplot2)
library(dbscan)
library(factoextra)
d = cbind(iris$Sepal.Length, iris$Sepal.Width)
# cluster the data (could be k-means, or any other method)
clus = dbscan(d, eps=0.2, minPts=5)
fviz_cluster(clus, data=iris,
choose.vars=c("Sepal.Length", "Sepal.Width"),
ellipse.type="convex", geom="point", show.clust.cent=FALSE)
# cluster again with different parameters
clus2 = dbscan(d, eps=0.3, minPts=5)
# How would I overlay the outlines and shading of the 'clus2' clusters
所以我想要的是这两个图的叠加。我当然会更改第二个的调色板。是否可以通过现成的fviz_cluster来执行此操作,还是必须进入内部?令我惊讶的是fviz_cluster应该基于“ ggplot2”,但不允许分层绘制,除非我错过了一些东西。
答案 0 :(得分:1)
fviz_cluster()
很高兴使用cluster
和data
绘制任何内容,因此您可以粗略地组合数据并对其进行绘制,但这并没有实现离群值功能,例如:
combined <- data.frame(cluster=clus1$cluster)
combined <- rbind(combined,
data.frame(cluster=ifelse(clus2$cluster > 0,
clus2$cluster + max(combined$cluster),
0)))
combined$data <- rbind(iris, iris)
fviz_cluster(combined,
choose.vars=c("Sepal.Length", "Sepal.Width"),
ellipse.type="convex",
geom="point", show.clust.cent=FALSE)
您可以通过编写自己的函数来合并两个或更多dbscan
对象,但这可能不会比以前的示例好得多。
ImageMagick可以将图像混合在一起并更改颜色。我认为这不会很好地工作,因为这些点的重叠以及它们的外观会发生变化,从而使图例不完整,等等,但这是一个示例:
convert AWRRa.png -modulate 100,100,120 \
\( AN4Ng.png -alpha set -channel a -evaluate set 70% +channel \) \
-compose over -composite blended.convert.png
该问题的切线答案,但值得通过gganimate或使用ImageMagick组合ggsave()
框架来探索(取决于您的媒介),例如:
使用grid.arrange()放弃并转到多个地块是另一种选择!