首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Sankey图中用R突出显示所有连接的路径

在Sankey图中用R突出显示所有连接的路径
EN

Stack Overflow用户
提问于 2017-09-10 15:06:14
回答 2查看 5K关注 0票数 14

当我点击节点来了解特定节点的整个故事时,我想突出显示整个路径,下面是一个例子- http://bl.ocks.org/git-ashish/8959771

请检查此链接,您将找到在javscript中突出显示路径的函数,但是请注意,这个函数没有做我想做的事情,它突出显示了与单击节点相关的链接和与目标节点相关的链接。我想要的是高亮显示与单击节点相关的所有链接。

d3 Sankey -从开始到结束突出显示所有连接的路径。

这是我需要的一个例子,

这是整个图,我需要的是,当我点击曼谷时,它会高亮显示所有与曼谷相同的节点,比如高亮显示到ClimateChange和EnergyShortage的链接,.然后突出基础设施和生态系统,领导和战略,和..。这就是我想要的。这是另一张图片,它显示了与曼谷相关的节点,并将其用于分析。

这里是当我使用highlight_node_links (在bl.ocks和链接问题中)时会发生什么,这是错误的,并且没有显示节点和Bangkoks之间的关系。

这是曼谷的数据,向你展示这些列是如何相互关联的,当你使用这些数据时,它只会生成第二张图片。

代码语言:javascript
运行
复制
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))
EN

Stack Overflow用户

回答已采纳

发布于 2020-02-16 02:36:04

这个问题的实现是在这个闪亮的应用程序中实现的。

https://setsna2.shinyapps.io/sankey-shinyforallcities/

我不得不从内部修改networkD3,我正常地安装它,并将它复制到包含闪亮应用程序的目录中,并将包放在R中。

我对绘制sankey图的sankeyNetwork.js函数做了一些修改。下面是该目录的图片,它显示了目录的结构,以到达需要手动更改sankeyNetwork.js的位置。

请注意,我在这个问题中使用和上传的sankeyNetwork.js版本是旧的,是两年前的版本,所以您可以下载新版本的networkD3,只需修改我接下来提到的部分。

我在sankeyNetwork.js中更改的是添加

代码语言:javascript
运行
复制
    .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

代码语言:javascript
运行
复制
        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来调试它,这是我检查我的应用程序工作是否正确的方式,也许你可以找到另一种方式进行调试。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46142160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档