当我点击节点以了解特定节点的整个故事时,我想强调整个路径,这里是一个例子 - 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 …Run Code Online (Sandbox Code Playgroud) ++++++++++++++++
更新: 我认为我的问题的答案是你不能放入换行符.一位同事向我指出节点标签是SVG块,它不支持换行符.
++++++++++++++++
如何为使用networkD3 R软件包生成的sankey图的节点标签添加换行符?
借用将文本值放置到sankey图右侧的示例,我可以为标签添加值:
library(networkD3)
library(data.table)
set.seed(1999)
links <- data.table(
src = rep(0:4, times=c(1,1,2,3,5)),
target = sample(1:11, 12, TRUE),
value = sample(100, 12)
)[src < target, ] # no loops
nodes <- data.table(name=LETTERS[1:12])
#### Need to hover to get counts
##sankeyNetwork(Links=links, Nodes=nodes, Source='src', Target='target',
## Value='value', NodeID='name', fontSize=16)
## Add text to label
txt <- links[, .(total = sum(value)), by=c('target')]
nodes[txt$target+1L, name := paste0(name, ' (', txt$total, ')')]
## Displays the counts as part of …Run Code Online (Sandbox Code Playgroud) 该networkD3包(见这里和这里)允许用户创建简单的互动网络:
# Load package
library(networkD3)
# Create fake data
src <- c("A", "A", "A", "A",
"B", "B", "C", "C", "D")
target <- c("B", "C", "D", "J",
"E", "F", "G", "H", "I")
networkData <- data.frame(src, target)
# Plot
simpleNetwork(networkData)
Run Code Online (Sandbox Code Playgroud)
有没有办法指定我希望src矢量中的所有元素都是某种颜色,同时允许target矢量中的所有元素都是不同的颜色?这将允许我在视觉上区分src节点和target网络中的节点.
目前似乎不支持此功能simpleNetwork()(但我希望有人可以帮助我使用自制程序脚本):
这里提出了一个类似但不相关的问题.
试图在R的networkD3包的帮助下制作一个相当通用的Sankey图.仅供参考 - 这是包装手册中的示例
library(networkD3)
library(jsonlite)
library(magrittr)
energy <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json" %>%
fromJSON
sankeyNetwork(Links = energy$links,
Nodes = energy$nodes,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name",
units = "TWh",
fontSize = 12,
nodeWidth = 30)
Run Code Online (Sandbox Code Playgroud)
这导致:
我相当简单的扩展包括使用以下基础数据构建图表:
links <- structure(list(source = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 4L,
5L, 4L, 5L),
.Label = c("1", "2", "3", "4", "5"),
class = "factor"),
target = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 4L,
4L),
.Label = …Run Code Online (Sandbox Code Playgroud) 我模拟了一些数据并使用 visnetwork 在 R 中创建了一个图形网络:
library(igraph)
library(dplyr)
library(visNetwork)
#create file from which to sample from
x5 <- sample(1:100, 1100, replace=T)
#convert to data frame
x5 = as.data.frame(x5)
#create first file (take a random sample from the created file)
a = sample_n(x5, 1000)
#create second file (take a random sample from the created file)
b = sample_n(x5, 1000)
#combine
c = cbind(a,b)
#create dataframe
c = data.frame(c)
#rename column names
colnames(c) <- c("a","b")
#create graph
graph <- graph.data.frame(c, directed=F)
graph <- …Run Code Online (Sandbox Code Playgroud) 我使用 R 中由 networkD3 包创建的交互式输出。我知道如何将输出保存为 html 页面,但我还需要将图表的“静态”版本保存为 .png 文件。
代码如下所示:
# Load package
library(networkD3)
# Create fake data
src <- c("A", "A", "A", "A", "B", "B", "C", "C", "D")
target <- c("B", "C", "D", "J", "E", "F", "G", "H", "I")
networkData <- data.frame(src, target)
# Plot
simpleNetwork(networkData)
Run Code Online (Sandbox Code Playgroud)
我可以通过单击“导出”然后“另存为图像”来保存输出。但是,我更喜欢在我的代码中使用一些命令来保存图片。
我创建了一个像这样的桑基图:
#install.packages("networkD3")
library(networkD3)
nodes = data.frame("name" =
c("Retour", # Node 0
"niet tevreden/ontevreden", # Node 1
"fout", # Node 2
"stuk",
"adres",
"verpakking",
"gebroken/glas"))# Node 3
links = as.data.frame(matrix(c(
0, 1, 10, # Each row represents a link. The first number
0, 2, 20, # represents the node being conntected from.
0, 3, 30,
2, 4, 8,
3, 5, 10,
3, 6, 12# the second number represents the node connected to.
),# The third number is the value of the …Run Code Online (Sandbox Code Playgroud) 由于每个对象,我用的时候获得在Firefox中非常小的情节sankeyNetwork()从networkd3在闪亮,但无法在Chrome或RStudio.
我没有在脚本中包含任何CSS或JS - 下面的代码为我生成了这个结果.
我错过了什么CSS属性吗?
我使用的是R 3.4.1,闪亮的1.1.0,networkD3 0.4和Firefox 52.9.0.
library(shiny)
library(magrittr)
library(shinydashboard)
library(networkD3)
labels = as.character(1:9)
ui <- tagList(
dashboardPage(
dashboardHeader(
title = "appName"
),
##### dasboardSidebar #####
dashboardSidebar(
sidebarMenu(
id = "sidebar",
menuItem("plots",
tabName = "sPlots")
)
),
##### dashboardBody #####
dashboardBody(
tabItems(
##### tab #####
tabItem(
tabName = "sPlots",
tabsetPanel(
tabPanel(
"Sankey plot",
fluidRow(
box(title = "title",
solidHeader = TRUE, collapsible = TRUE, status = "primary",
sankeyNetworkOutput("sankeyHSM1")
)
)
) …Run Code Online (Sandbox Code Playgroud) 我在networkD3包中创建了一个sankey图.我想修改节点和链接的颜色和透明度.
我的数据networkD3_data最后附上.
问题1:如何使用用户定义的调色板修改节点颜色?
我不知道如何使用用户定义的调色板修改颜色.我必须使用特定于每个节点源的相同调色板来与我拥有的其他绘图保持一致.
目前,通过定义,我可以让每个源节点都是不同的颜色,所有目标节点都是相同的颜色NodeGroup.下面的图表接近我想要的,但是现在我想自己指定每个源节点的颜色.
library(networkD3)
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14)
Run Code Online (Sandbox Code Playgroud)
?sankeyNetwork说有一个colourScale参数,它带有"指定节点的分类色标的字符串".我认为这意味着我可以将具有所需颜色的列添加到networkD3_data$nodes数据框并按此调用colourScale:
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14, colourScale="colors")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,没有产生情节.我搜索了stackoverflow,并在2014年找到了答案:在这里,但我认为这不再适用,因为我在Error: unexpected symbol调用这些提议的解决方案时遇到错误(或者我可能只是不知道如何正确实现).
d3.scale.ordinal().range(["#7d3945","#e0677b", "#244457"])
d3.scaleOrdinal().range(["#7d3945","#e0677b", "#244457"])
Run Code Online (Sandbox Code Playgroud)
问题2:是否可以定义源和目标的显示顺序?
那么源从Source0到Source10列出,目标从Target11到Target47?这套在哪里?我知道这对于允许算法最佳地定位节点是违反直觉的.
问题3:如何使用用户定义的调色板修改链接颜色并更改透明度/不透明度?
我还想使用与源相同的颜色方案对源发出的链接进行颜色编码.我可以通过定义来做到这一点LinkGroup,见下图.我再次接近我想要的,但我只需要指定自己使用的颜色,我不知道在哪里修改它.我还想调整不透明度,使源颜色比链接颜色更坚固.
sankeyNetwork(Links = …Run Code Online (Sandbox Code Playgroud) 我使用以下代码创建了一个交互式可视化:
library(networkD3)
nodes = data.frame("name" = c("node1", "node2","node3", "node4", "node5", "node6", "node7"))
links = as.data.frame(matrix(c(
0,1,7937,
0,2,6990,
0,3,2483,
1,4,2120,
2,4,666,
3,4,282,
1,5,4583,
2,5,5657,
3,5,731,
1,6,1234,
2,6,756,
3,6,1470), byrow = TRUE, ncol = 3))
names(links) = c("source", "target", "value")
sankey <- sankeyNetwork(Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
fontSize= 12, nodeWidth = 15)'
Run Code Online (Sandbox Code Playgroud)
这是我第一次使用 networkD3 包(或任何与此相关的交互式包),并且通过玩弄我发现为了保持它的交互性,它必须作为网页发布(或者有其他方式吗??)但是查看包的文档我看不到添加标题或标题/评论的方法。我想分享这一轮工作,所以需要在发布的网页上解释每个级别的理想含义
r ×10
networkd3 ×9
htmlwidgets ×8
shiny ×2
d3.js ×1
graph ×1
htmltools ×1
igraph ×1
javascript ×1
png ×1
popup ×1
rcharts ×1
visnetwork ×1