是否可以使用wordcloud2创建闪亮的点击事件?

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

是否有可能使用wordcloud2包返回wordcloud中任何单词的单击作为闪亮的单击事件,以便将其他对象(例如bsModal)绑定到它?例如,在图中,这是通过生成可以从闪亮会话内访问的对象并保存事件数据(例如点击坐标)(https://plot.ly/r/shinyapp-linked-click/)来实现的。

在下面的示例中,我想将bsModal绑定到wordcloud,以便显示用户单击的单词。

长子。 [R

library(shiny)
shinyUI(fluidPage(
    mainPanel(
        wordcloud2Output("wordcloud")
    )
))

server.R

library(shiny)
library(wordcloud2)
library(tm)

shinyServer(function(input, output) {

    words <- c ("1st", "2nd", "3rd", "4th", "5h", "6th", "7th", "8th", "9th", "10th", "11th", "12th", "13th", "14th", "15th", "16th", "17th", "18th", "19th", "20th",
            "21st", "22nd", "23rd", "24th", "25th", "26th", "27th", "28th", "29th", "30th")
    random_words <- sample(words, 500, replace = TRUE)
    docs <- Corpus(VectorSource(random_words))
    dtm <- TermDocumentMatrix(docs)
    m <- as.matrix(dtm)
    v <- sort(rowSums(m),decreasing=TRUE)
    d <- data.frame(word = names(v),freq=v)

    wordcloud_plot <- wordcloud2(data = d, size = 0.7, shuffle =FALSE, ellipticity = 1, minRotation = -pi/8, maxRotation = pi/8,
                            shape = 'circle')
    output$wordcloud  <- renderWordcloud2(wordcloud_plot)
})
r shiny word-cloud
1个回答
6
投票

是的,你可以通过在Shiny应用程序的UI中添加几行javascript来解决这个问题。

只需按如下方式修改UI:

library(shiny)
shinyUI(fluidPage(
    mainPanel(
        wordcloud2Output("wordcloud"),
        tags$script(HTML(
               "$(document).on('click', '#canvas', function() {",
               'word = document.getElementById("wcSpan").innerHTML;',
               "Shiny.onInputChange('selected_word', word);",
               "});"
            ))
    )
))

此代码生成一个新的输入变量,您可以通过shinyapp服务器端的input$selected_word访问该变量,并且您可以使用它将wordcloud与应用程序中的其他对象绑定。

当它采用悬停函数的值时,输入将具有格式word:freq。您可以使用gsub()摆脱频率和冒号,如下所示:gsub(":.*","",isolate(input$selected_word))

希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.