是否有可能使用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)
})
是的,你可以通过在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))
希望能帮助到你!