当我点击节点以了解特定节点的整个故事时,我想强调整个路径,这里是一个例子 - 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) 在下面给出的r-markdown文档中,我使用选项卡部分来显示sankey图.
但是,当sankey绘图位于第一个以外的选项卡中时,调整(使用htmlwidgets::onRender
功能)不起作用.有人知道克服这个问题的方法吗?
相关问题:如何在Sankey图中控制节点标签
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(networkD3)
library(htmlwidgets)
nodes <- data.frame('name' =
c('Node0','Node1','Node2','Node3','Node4','Node5','Node6',
'Node7','Node8','Node9','Node10','Node11','Node12','Node13',
'Node14','Node15','Node16','Node17','Node18','Node19',
'Node20','Node21','Node22','Node23','Node24','Node25',
'Node26','Node27','Node28','Node29','Node30','Node31',
'Node32','Node33'))
links = as.data.frame(matrix(c(
0, 3,140,
0, 4,140,
0, 5,140,
0, 6,140,
1, 3,140,
1, 4,140,
1, 5,140,
1, 6,140,
2, 3,140,
2, 4,140,
2, 5,140,
2, 6,140,
3, 7,130,
3, 8,130,
3, 9,50,
3,10,50,
3,11,50,
4,12,140,
4,13,100,
4,14,100,
4,15,80,
5,16,150,
5,17,150,
5,18,60,
5,19,60,
6,20,180,
6,21,80,
6,22,80,
6,23,80,
7,24,13, …
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) 请考虑以下数据框:
Country Provinces City Zone
1 Canada Newfondland St Johns A
2 Canada PEI Charlottetown B
3 Canada Nova Scotia Halifax C
4 Canada New Brunswick Fredericton D
5 Canada Quebec NA NA
6 Canada Quebec Quebec City NA
7 Canada Ontario Toronto A
8 Canada Ontario Ottawa B
9 Canada Manitoba Winnipeg C
10 Canada Saskatchewan Regina D
Run Code Online (Sandbox Code Playgroud)
是否有一种聪明的方法将其转换为treeNetwork
兼容列表(从networkD3
包中),形式如下:
CanadaPC <- list(name = "Canada",
children = list(
list(name = "Newfoundland",
children = list(list(name = "St. …
Run Code Online (Sandbox Code Playgroud) 有没有把文字放在使用networkD3渲染的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 the labels
sankeyNetwork(Links=links, Nodes=nodes, Source='src', Target='target',
Value='value', …
Run Code Online (Sandbox Code Playgroud) 这是我的第一个问题; 所以,请温柔.
我有一些数据形式:
library('networkD3')
Relationships<- data.frame(Parent=c("earth","earth","forest","forest","ocean","ocean","ocean","ocean"),
Child=c("ocean","forest","tree","sasquatch","fish","seaweed","mantis shrimp","sea monster"))
> Relationships
Parent Child
1 earth ocean
2 earth forest
3 forest tree
4 forest sasquatch
5 ocean fish
6 ocean seaweed
7 ocean mantis shrimp
8 ocean sea monster
Run Code Online (Sandbox Code Playgroud)
本质上,这是一个可用于制作网络地图的边缘列表:
net <- graph_from_data_frame(d = Relationships,
directed = T)
plot(net)
Run Code Online (Sandbox Code Playgroud)
我想将它转换为可以在diagonalNetwork
下面的函数中使用的形式.
Hierarchical_list <- list(name = "earth",
children = list(list(name = "ocean",
children = list(list(name = "mantis shrimp"),
list(name = "fish"),
list(name = "sea monster"),
list(name = "seaweed")
)),
list(name …
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)
我可以通过单击“导出”然后“另存为图像”来保存输出。但是,我更喜欢在我的代码中使用一些命令来保存图片。
我想使用networkD3可视化一些深层嵌套的数据.在发送之前,我无法弄清楚如何将数据转换成正确的格式radialNetwork
.
以下是一些示例数据:
level <- c(1, 2, 3, 4, 4, 3, 4, 4, 1, 2, 3)
value <- letters[1:11]
Run Code Online (Sandbox Code Playgroud)
where level
表示嵌套的级别,value
是节点的名称.通过使用这两个向量,我需要将数据转换为以下格式:
my_list <- list(
name = "root",
children = list(
list(
name = value[1], ## a
children = list(list(
name = value[2], ## b
children = list(list(
name = value[3], ## c
children = list(
list(name = value[4]), ## d
list(name = value[5]) ## e
)
),
list(
name = value[6], ## f
children …
Run Code Online (Sandbox Code Playgroud) networkd3 ×10
r ×10
htmlwidgets ×5
d3.js ×2
javascript ×1
knitr ×1
nested-lists ×1
png ×1
rcharts ×1
recursion ×1