在另存为 PNG 之前隐藏 htmlwidget 图的元素

问题描述 投票:0回答:1

我一直在 R 中使用一个名为“aweSOM”的库。它是一个基于为自组织地图 (SOM) 提供 HTML 交互式视觉效果的库。

aweSOM 比类似的 SOM 包产生更好的视觉效果,所以我会使用它。然而,问题有两个:

  1. HTML 交互式视觉效果不适合发布。
  2. 当我另存为 PNG 时,图像上仍保留(交互式)文本 PNG“将鼠标悬停在绘图上以获取信息。”

因此,我想知道是否可以编写一个函数,将“绘图”保存为 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

r machine-learning png visualization
1个回答
5
投票

这些标签是如何创建的

如果您查看

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)

现在可以生成所需的绘图:

注意:如果您还想删除绘图下方的

-
,只需将该函数也应用于附加元素即可:

to_hide  <- c("prepend", "append")
plot[to_hide]  <- lapply(plot[to_hide], \(l) lapply(l, hide_element))
# ^^ plot is now as above but without the "-" below it
© www.soinside.com 2019 - 2024. All rights reserved.