将networkD3中的节点上的clickAction链接到本地HTML文件 [英] linking clickAction on a node in networkD3 to a local HTML file
问题描述
我正在尝试R中的networkD3软件包中的forcenetwork功能.
Hi I am trying forcenetwork function in networkD3 package in R.
我被clickAction卡住了. clickAction的目的是打开一个新窗口以显示本地HTML文件的内容.但是现在,可以添加 http://www.google.com 之类的网站URL.但是我被困在打开本地HTML文件中.
I get stuck with clickAction. The aim of clickAction is to open a new window to show the content of a local HTML file. But now, It is ok to add a website URL like http://www.google.com. But I get stuck with opening local HTML file.
当我添加本地HTML文件的方向时,它不起作用并显示未找到".
When I add the direction of local HTML file, it doesn't work and show "Not Found".
我试图将所有HTML文件放在相对路径下的www文件中.但这不起作用.
I have tried to put all HTML files in www file in relative path. But it doesn't work.
我想知道是否有任何方法可以在clickAction中显示本地HTML文件? 谢谢!
I was wondering if there is any way to show the local HTML file in clickAction? Thanks!
library(shiny)
library(networkD3)
source =c(0,0,3,3,3,7,7,10,9,7,1,6,4,5,8,2)
target = c(1,2,4,5,6,8,9,11,12,10,9,10,8,9,11,8)
value = c(10,10,10,10,10,10,10,20,20,10,2,2,2,10,20,15)
MisLinks = data.frame(source,target,value)
name = c("[Category]Genre", "CCG", "Action", "[Category]Art","Realistic Art", "Dark Art", "Cartoony", "[Category]Time demend", "Mid-Core", "Hard-Core", "Casual", "Install", "Not Install")
group = c(1,2,2,3,4,4,4,5,6,6,6,8,8)
size = c(50,20,20,50,20,20,20,50,20,20,20,250,250)
hyperlink = c("file:///C:/user/docname.html", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://yahoo.com")
MisNodes = data.frame(name, group, size, hyperlink)
ui = fluidPage(
titlePanel("Testing app"),
sidebarLayout(
sidebarPanel(
sliderInput("opacity", "Test", 0.6, min = 0.1, max = 1, step = .1)
),
mainPanel(
tabsetPanel(
tabPanel("Force Network", forceNetworkOutput("force"))
)
)
)
)
Myclickaction = "window.open(d.hyperlink, '_blank')"
server = function(input,output) {
output$force = renderForceNetwork({
fn <- forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target", charge = -150,
legend = TRUE, opacityNoHover = 1, Nodesize = "size",
Value = "value", NodeID = "name",
Group = "group", linkWidth = 2, clickAction = Myclickaction,
opacity = 0.9, colourScale =JS("d3.scaleOrdinal(d3.schemeCategory20);"),
zoom=TRUE)
fn$x$nodes$hyperlink <- hyperlink
fn
})
}
shinyApp(ui = ui, server = server)
推荐答案
在运行shinyApp
之前,使用addResourcePath
函数分配闪亮的可访问目录,例如addResourcePath('sub_dir', 'www')
Use the addResourcePath
function to assign a shiny accessible directory before running shinyApp
, e.g. addResourcePath('sub_dir', 'www')
然后确保您指向本地文件的超链接与此相对应,例如hyperlink = c("sub_dir/docname.html", "http://yahoo.com")
then make sure your hyperlinks to local files are appropriate to that, e.g. hyperlink = c("sub_dir/docname.html", "http://yahoo.com")
,并确保要链接的文件位于使用addResourcePath
的第二个参数指定的目录中(您可以相对于R中的当前工作目录指定目录,也可以使用有效的绝对目录路径)
and make sure the file/s you want to link to are in the directory you specified with the 2nd argument of addResourcePath
(you can specify the directory either relative to your current working directory in R, or with a valid absolute path)
所以它看起来像...
so it might look like...
library(shiny)
library(networkD3)
source =c(0,0,3,3,3,7,7,10,9,7,1,6,4,5,8,2)
target = c(1,2,4,5,6,8,9,11,12,10,9,10,8,9,11,8)
value = c(10,10,10,10,10,10,10,20,20,10,2,2,2,10,20,15)
MisLinks = data.frame(source,target,value)
name = c("[Category]Genre", "CCG", "Action", "[Category]Art","Realistic Art", "Dark Art", "Cartoony", "[Category]Time demend", "Mid-Core", "Hard-Core", "Casual", "Install", "Not Install")
group = c(1,2,2,3,4,4,4,5,6,6,6,8,8)
size = c(50,20,20,50,20,20,20,50,20,20,20,250,250)
hyperlink = c("sub_dir/docname.html", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://yahoo.com")
MisNodes = data.frame(name, group, size, hyperlink)
ui = fluidPage(
titlePanel("Testing app"),
sidebarLayout(
sidebarPanel(
sliderInput("opacity", "Test", 0.6, min = 0.1, max = 1, step = .1)
),
mainPanel(
tabsetPanel(
tabPanel("Force Network", forceNetworkOutput("force"))
)
)
)
)
Myclickaction = "window.open(d.hyperlink, '_blank')"
server = function(input,output) {
output$force = renderForceNetwork({
fn <- forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target", charge = -150,
legend = TRUE, opacityNoHover = 1, Nodesize = "size",
Value = "value", NodeID = "name",
Group = "group", linkWidth = 2, clickAction = Myclickaction,
opacity = 0.9, colourScale =JS("d3.scaleOrdinal(d3.schemeCategory20);"),
zoom=TRUE)
fn$x$nodes$hyperlink <- hyperlink
fn
})
}
addResourcePath('sub_dir', 'www')
shinyApp(ui = ui, server = server)
这篇关于将networkD3中的节点上的clickAction链接到本地HTML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!