当我点击节点来了解特定节点的整个故事时,我想突出显示整个路径,下面是一个例子- http://bl.ocks.org/git-ashish/8959771。
请检查此链接,您将找到在javscript中突出显示路径的函数,但是请注意,这个函数没有做我想做的事情,它突出显示了与单击节点相关的链接和与目标节点相关的链接。我想要的是高亮显示与单击节点相关的所有链接。
这是我需要的一个例子,
这是整个图,我需要的是,当我点击曼谷时,它会高亮显示所有与曼谷相同的节点,比如高亮显示到ClimateChange和EnergyShortage的链接,.然后突出基础设施和生态系统,领导和战略,和..。这就是我想要的。这是另一张图片,它显示了与曼谷相关的节点,并将其用于分析。
这里是当我使用highlight_node_links (在bl.ocks和链接问题中)时会发生什么,这是错误的,并且没有显示节点和Bangkoks之间的关系。
这是曼谷的数据,向你展示这些列是如何相互关联的,当你使用这些数据时,它只会生成第二张图片。
structure(list(City = c("Bangkok", "Bangkok", "Bangkok", "Bangkok",
"Bangkok", "Bangkok", "Bangkok", "Bangkok", "Bangkok", "Bangkok",
"Bangkok", "Bangkok", "Bangkok", "Bangkok", "Bangkok", "Bangkok"
), ResiliencyChallenge = c("ClimateChange", "ClimateChange",
"ClimateChange", "ClimateChange", "ClimateChange", "InfrastructureFaliure",
"EnergyShortage", "Pollution", "Pollution", "Pollution", "TransportationSystemFailure",
"TransportationSystemFailure", "TransportationSystemFailure",
"TransportationSystemFailure", "TransportationSystemFailure",
"TransportationSystemFailure"), CRI.Dimesnsion.1 = c("Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Infrastructure & Ecosystems",
"Leadership & Strategy", "Leadership & Strategy", "Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Infrastructure & Ecosystems",
"Infrastructure & Ecosystems", "Leadership & Strategy"), Implementation.time.frame = c("Short-term",
"Short-term", "Short-term", "Short-term", "Short-term", "Mid-term",
"Long-term", "Short-term", "Short-term", "Mid-term", "Mid-term",
"Short-term", "Short-term", "Short-term", "Short-term", "Short-term"
), Goal = c("Goal13", "Goal13", "Goal13", "Goal13", "Goal13",
"Goal12", "Goal12", "Goal11", "Goal11", "Goal11", "Goal11", "Goal11",
"Goal11", "Goal11", "Goal11", "Goal11")), .Names = c("City",
"ResiliencyChallenge", "CRI.Dimesnsion.1", "Implementation.time.frame",
"Goal"), class = "data.frame", row.names = c(NA, -16L))
发布于 2020-02-16 02:36:04
这个问题的实现是在这个闪亮的应用程序中实现的。
https://setsna2.shinyapps.io/sankey-shinyforallcities/
我不得不从内部修改networkD3
,我正常地安装它,并将它复制到包含闪亮应用程序的目录中,并将包放在R中。
我对绘制sankey图的sankeyNetwork.js
函数做了一些修改。下面是该目录的图片,它显示了目录的结构,以到达需要手动更改sankeyNetwork.js
的位置。
请注意,我在这个问题中使用和上传的sankeyNetwork.js
版本是旧的,是两年前的版本,所以您可以下载新版本的networkD3
,只需修改我接下来提到的部分。
我在sankeyNetwork.js
中更改的是添加
.on('mouseover', function(node) {
Shiny.onInputChange("node_name", node.name);
})
这意味着如果有人在节点上悬停,我将把节点名为"node_name“变量传递给我的R会话,通过使用Shiny.onInputChange
,您可以在网上读到更多关于这个闪亮函数的信息。
这是我以前知道我的意思的sankeyNetwork.js
。
现在,如果有人悬停在一个节点上,我可以得到这个节点的名称并将其发送给R,如果他移开光标,我将不会得到任何名称,这就是核心思想。
您可以通过单击这里查看我闪亮的应用程序的代码。
您可以从Data0
变量这里中看到一部分Goals
变量,也可以从这里中看到Goals
变量。
在R代码中,您会看到一些注释,上面写着“用于调试使用此代码”或代码中的注释,因此如果您运行这些注释,在运行这个闪亮的应用程序之前,您将了解数据的样子,以便完全了解sankey图形是如何读取数据的,以及它应该是什么样的。
在R代码中,您会发现这一部分是从sankeyNetwork.js
读取sankeyNetwork.js
的
NodeName <- reactive({
if(length(input$node_name)>0){return(as.character(input$node_name))}
else{return(0)}
})
然后,代码的下一部分是检查NodeName
是否在我的Nodes
dataframe中,如果它存在,那么我将得到与此节点相关的所有节点,然后我将得到连接这些节点的链接id,请注意链接id从0
而不是从1
开始,因为javascript从0开始,R从1开始。
现在我们有了用户正在悬停的NodeName
和与此节点相关的Links
,现在我们可以创建sankey图并将其保存在sn
中,然后删除旧的工具提示并添加一个新的工具提示。
使用onRender
修改sankey图,同时使用sankey图,我使用它使突出显示函数在运行时修改sankey图,当用户在节点上悬停时,我将得到节点的名称,然后获取链接ids并在现有的sankey图中搜索链接ids,提高其不透明度。
请注意,如果你运行应用程序,你会得到错误,你必须上传到shinyapps.io来调试它,这是我检查我的应用程序工作是否正确的方式,也许你可以找到另一种方式进行调试。
https://stackoverflow.com/questions/46142160
复制相似问题