我一直在 R 中使用一个名为“aweSOM”的库。它是一个基于为自组织地图 (SOM) 提供 HTML 交互式视觉效果的库。
aweSOM 比类似的 SOM 包产生更好的视觉效果,所以我会使用它。然而,问题有两个:
因此,我想知道是否可以编写一个函数,将“绘图”保存为 PNG,但没有上面的交互式文本?
因此,有效地编写一个函数,仅保存特定大小的正方形,从而省略文本?
非常感谢您的反馈和帮助。
install.packages("aweSOM")
library(aweSOM)
full.data <- iris
train.data <- full.data[, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")]
train.data <- scale(train.data)
set.seed(1465)
init <- somInit(train.data, 4, 4)
iris.som <- kohonen::som(train.data, grid = kohonen::somgrid(4, 4, "hexagonal"),
rlen = 100, alpha = c(0.05, 0.01), radius = c(2.65,-2.65),
dist.fcts = "sumofsquares", init = init)
superclust_pam <- cluster::pam(iris.som$codes[[1]], 3)
superclasses_pam <- superclust_pam$clustering
###########
#PROBLEMATIC PLOT WITH INTERACTIVE TEXT
##########
plot <- aweSOMplot(som = iris.som, type = "Cloud", data = full.data,
variables = c("Species", "Sepal.Length", "Sepal.Width",
"Petal.Length", "Petal.Width"),
superclass = superclasses_pam)
修复可视化方面的所有帮助将不胜感激。这里有一个小插曲:
https://cran.r-project.org/web/packages/aweSOM/vignettes/aweSOM.html#the-awesom-package
如果您查看
aweSOMplot()
R source,您会发现它在实际绘图中添加了两个 <h4>
html 标签(称为 res
):
res <- htmlwidgets::prependContent(res, htmltools::tag("h4", list(id= paste0(res$elementId, "-info"))))
res <- htmlwidgets::prependContent(res, htmltools::tag("h4", list(id= paste0(res$elementId, "-message"))))
aweSOMwidget.js
source 然后添加相关文本:
document.getElementById(infoId).innerHTML = "Hover over the plot for information.";
document.getElementById(messageId).innerHTML = "-";
创建 R 函数以将
htmlwidgets::htmlwidget
元素设置为不可见:
hide_element <- function(el) {
el$attribs$style <- 'visibility: hidden;'
el
}
然后将其应用于绘图中的前置对象:
plot$prepend <- lapply(plot$prepend, hide_element)
现在可以生成所需的绘图: