Oma*_*ser 12 r rcharts sankey-diagram networkd3 htmlwidgets
当我点击节点以了解特定节点的整个故事时,我想强调整个路径,这里是一个例子 - http://bl.ocks.org/git-ashish/8959771.
请检查此链接,你会发现在javscript中突出显示路径的功能,但请注意,此功能不能达到我想要的效果,它突出显示与被点击的节点相关的链接以及与目标节点相关的链接.我想要的是突出显示与点击的节点相关的所有链接.
这是我需要的一个例子,
这是整个图,我需要的是,当我点击曼谷时,它突出显示与数据框中曼谷相同的所有节点,如突出显示与ClimateChange和EnergyShortage的链接,......然后突出显示基础设施和生态系统,和领导力和战略,......这就是我想要的.这是另一张图片,显示与曼谷相关的节点使用闪亮来分析它.
这是当我在bl.ocks和链接的问题中使用highlight_node_links时会发生什么,这是错误的,并没有显示节点和曼谷之间的关系.
以下是曼谷的数据,向您展示列如何相互关联,当您使用这些数据时,它将仅生成第二张图片.
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))
Run Code Online (Sandbox Code Playgroud)
这个问题的实现是在这个闪亮的应用程序中。
https://setsna2.shinyapps.io/sankey-shinyforallcities/
我必须networkD3
从内部进行修改,我正常安装了它,并将其复制到包含闪亮应用程序的目录中,并将包放入 R-lib 中。
我对sankeyNetwork.js
绘制桑基图的函数做了一些修改。这是目录的图片,它显示了目录的结构,以到达必须sankeyNetwork.js
手动更改它的位置。
请注意,我在这个问题中使用和上传的版本sankeyNetwork.js
是旧的,是2年前的,所以你可以下载新版本networkD3
,只需修改我接下来提到的部分。
我改变的
sankeyNetwork.js
是添加
.on('mouseover', function(node) {
Shiny.onInputChange("node_name", node.name);
})
Run Code Online (Sandbox Code Playgroud)
这意味着如果有人将鼠标悬停在节点上,我将通过使用将节点名称作为“node_name”变量传输到我的 R 会话Shiny.onInputChange
,您可以在线阅读有关此闪亮函数的更多信息。
这是sankeyNetwork.js
我曾经知道我的意思。
现在,如果有人将鼠标悬停在一个节点上,我可以获取该节点的名称并将其发送到 R,如果他移开光标,我将不会得到任何名称,这就是核心思想。
您可以点击此处查看我的闪亮应用程序的代码
您可以在这里Data0
看到变量的一部分,也可以从这里看到变量。Goals
在 R 代码中,您会发现一些注释说“用于调试,请使用此代码”或代码中的注释,因此,如果您运行这些注释,您将在运行闪亮的应用程序之前了解数据的外观,以完全理解桑基图的读取方式数据及其外观。
在 R 代码中,你会发现这部分正在读取 node_namesankeyNetwork.js
NodeName <- reactive({
if(length(input$node_name)>0){return(as.character(input$node_name))}
else{return(0)}
})
Run Code Online (Sandbox Code Playgroud)
然后代码中的下一部分是检查是否NodeName
在我的Nodes
数据框中,如果存在,那么我将获取与该节点相关的所有节点,然后我将获取将这些节点彼此连接的链接 ID ,请注意链接 id0
不是从 开始的1
,因为 javascript 从 0 开始,而 R 从 1 开始。
现在我们有了NodeName
用户悬停在其上的 以及Links
与该节点相关的 ,现在我们可以制作桑基图并将其保存在 中sn
,然后我删除旧的工具提示并添加一个新的。
用于onRender
在使用闪亮时修改桑基图,我用它来制作突出显示功能以在运行闪亮时修改桑基图,当用户将鼠标悬停在节点上时,我将获取节点的名称,然后获取链接 ID 并搜索现有桑基图中的链接 ID 并增加其不透明度。
请注意,如果你运行该应用程序,你会收到错误,你必须将其上传到shinyapps.io上才能调试它,这就是我检查我的应用程序是否正常工作的方式,也许你可以找到另一种调试方式。