标签: networkd3

Sankey Diagram的自有颜色范围,带有NetworkD3包

我试图sankeyNetwork()在networkD3包中使用Sankey图.

sankeyNetwork(Links = Flow_data, Nodes = Nodes_data,
    Source = "Source_ID", Target = "Target",
    Value = "value", NodeID = "Nodes_name",
    width = 1000, height=600, fontsize = 16, nodeWidth = 50,
    colourScale = "d3.scale.category20c()")
Run Code Online (Sandbox Code Playgroud)

可视化效果很好,但我想将颜色范围更改为单个范围.有没有机会改变SankeyNetwork的颜色?我需要一系列只有3种颜色,我可以自己设置(不是d3.scale的预定义colourScales).

r d3.js sankey-diagram networkd3 htmlwidgets

5
推荐指数
1
解决办法
3634
查看次数

如何在 R 中为桑基图准备输入数据?

我正在尝试在 R 中生成桑基图,也称为河流图。我见过这个问题Sankey Charts in R? 其中列出了生成桑基图的各种软件包。由于我有输入数据并且知道不同的工具/包,我可以生成这样的图表,但我的疑问是:我如何为此准备输入数据?

假设我们想要展示用户在 10 天内如何在不同状态之间迁移,并具有如下所示的起始数据集:

data.frame(userID = 1:100,
                     day1_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day2_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day3_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day4_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day5_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day6_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day7_state = sample(letters[1:8], replace = TRUE, size = 100),
                     day8_state …
Run Code Online (Sandbox Code Playgroud)

r data-visualization sankey-diagram networkd3

5
推荐指数
1
解决办法
2979
查看次数

如何在网格中排列 html 小部件图以导出为 pdf?

我想结合丰富的 html 小部件(主要是plotly和networkD3),以及将它们排列为R网格中的绘图的可能性,将它们导出为出版物的pdf图形。但是,如果我在 R 中创建一些 html 小部件对象并尝试使用gridExtra::grid.arrange()排列它们(请参见下面的最小示例),我会收到以下错误:

\n\n
Error in gList(list(x = list(links = list(source = c(0, 0), target = c(1,  : \nonly \'grobs\' allowed in "gList"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我搜索了 \xe2\x80\x9cconverting html widgets to grobs 或plots\xe2\x80\x9d 以便能够将它们排列在网格中,但找不到任何相关信息。我可以采用漫长的手动方式,首先使用htmlwidgets::saveWidget()将 html 小部件保存为网站,然后使用webshot::webshot()将其转换为 pdf,并使用矢量图形编辑器手动排列图形(例如墨景)。但尽管需要手动操作,所有转换步骤都可能会导致质量下降。

\n\n

也许我可以以某种方式用表格或列排列 LaTeX R-Markdown 文档中的图形,并指定纸张尺寸以适合我的绘图。但不知怎的,这感觉不像是一个理想的解决方案,因为我可能想将我的图表动态地排列在多个列和行中,添加标题等,这将使 LaTeX/knitr 中的排列变得相当复杂。

\n\n

因此,在我开始手动将所有内容编织在一起之前,我想问您是否知道更好的方法来排列一些 html 小部件图并将它们导出到 R 中的 pdf 中?

\n\n
\n\n

最小的例子

\n\n

这是一个重现我的问题的小例子。让\xe2\x80\x99s 说我的目标是一个图表,通过将两个不同过程的能量流相互比较(带有networkD3的桑基图),将它们排列在网格中,如下所示:\n示例性排列桑基图

\n\n

这将是我的代码:

\n\n
library(networkD3)\nlibrary(grid)\nlibrary(gridExtra)\n\n## Create simplified Data\ndfSankey <- list()\ndfSankey$nodes <- data.frame(Name …
Run Code Online (Sandbox Code Playgroud)

r gridextra networkd3 htmlwidgets

5
推荐指数
1
解决办法
2217
查看次数

forceNetwork 不是零索引

我正在尝试创建一个简单的forceNetwork,但该图不会呈现。我不断收到以下警告:

Warning message: It looks like Source/Target is not zero-indexed. This is required in JavaScript and so your plot may not render.

我该如何解决?请注意,这simpleNetwork很好用,所以问题似乎出在我如何指定我的数据上。

library(igraph)
library(networkD3)
set.seed(42)
temp<-data.frame(source=c(1,2,3,4),target=c(2,3,4,4))#csv[1:500,]

links<-data.frame(source=temp$source,target=temp$target)
g<-graph.data.frame(cbind(temp$source,temp$target), directed=T)
nodes<-data.frame(name=1:length(V(g)),group=1)

forceNetwork(Links=links,Nodes = nodes,
             Source = 'source', Target = 'target', 
             NodeID = 'name', Group = 'group')

simpleNetwork(temp)
Run Code Online (Sandbox Code Playgroud)

javascript r igraph networkd3 htmlwidgets

5
推荐指数
1
解决办法
1787
查看次数

Shiny&networkD3响应节点点击

我正在尝试使用networkD3和shiny来可视化一些数据.我希望在单击图表中的节点时执行操作.我正在使用对齐网络,如下面的代码所示.

forceNetwork可以选择在单击节点时进行"clickaction"响应.但是,我无法为diagonalNetwork找到类似的选项,还有另一种方法可以实现吗?

谢谢你的帮助!

#### Load necessary packages and data ####
library(shiny)
library(networkD3)

data(MisLinks)
data(MisNodes)

hc <- hclust(dist(USArrests), "ave")
URL <- paste0(
  "https://cdn.rawgit.com/christophergandrud/networkD3/",
  "master/JSONdata//flare.json")



## Convert to list format
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)


#### Server ####
server <- function(input, output) {

  output$simple <- renderDiagonalNetwork({
    diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9)
  })  


  output$force <- renderForceNetwork({
    forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
                 Target = "target", Value = "value", NodeID = "name",
                 Group = "group", opacity …
Run Code Online (Sandbox Code Playgroud)

javascript r shiny networkd3 htmlwidgets

5
推荐指数
1
解决办法
896
查看次数

使用R中的NetworkD3包创建Sankey图

目前,我正在尝试networkD3按照Chris Grandrud(https://christophergandrud.github.io/networkD3/)的说明创建一个包含交互式的Sankey .
我不明白的是表格式,因为他只使用两列来可视化更多的过渡.更具体地说,我有一个包含四列代表4年的数据集.这些列中有不同的酒店名称,而每行代表一个客户,这四年内被"跟踪".

    URL <- paste0(
        "https://cdn.rawgit.com/christophergandrud/networkD3/",
        "master/JSONdata/energy.json")
    Energy <- jsonlite::fromJSON(URL)

    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)

为了向您概述我的数据,请点击此处截图:

SampleDataScreenshot

我会给你更多"编码"信息,但由于我对RI这个话题很新,希望你能在这个问题上跟随我的思路.如果没有,请不要犹豫不决.

谢谢 :)

plot r sankey-diagram networkd3 htmlwidgets

5
推荐指数
2
解决办法
3746
查看次数

R中的Sankey图与networkD3 - 行号问题

sankey图

我想重点关注上面的流程,将蓝色的"热量发电"块连接到粉红色的"电网"块.你会注意到流量是526 TWh,这是#62行Energy$links.

Energy$links
   source target   value
...
62     26     15 525.531
...
Run Code Online (Sandbox Code Playgroud)

现在让我们关注引用节点的sourcetargetEnergy$nodes.

Energy$nodes
                             name
...
15        Heating and cooling - homes
16                   Electricity grid
...
26                       Gas reserves
27                 Thermal generation
...
Run Code Online (Sandbox Code Playgroud)

source当它实际引用节点数据的行"27"时,该值为"26".当实际引用节点数据的行"16"时,目标值为"15".为什么链接数据中的源和目标值实际上是指节点数据中的行 x-1而不是x?除了在构建这些Sankey图时在我头脑中执行x - 1计算时,还有什么方法吗?

这是完整的Energy数据:

> Energy
$`nodes`
                                 name
1                Agricultural 'waste'
2                      Bio-conversion
3                              Liquid
4                              Losses
5                               Solid
6                                 Gas
7                     Biofuel imports
8                     Biomass imports
9 …
Run Code Online (Sandbox Code Playgroud)

r sankey-diagram networkd3 htmlwidgets

5
推荐指数
1
解决办法
243
查看次数

将 networkD3 图形导出为矢量图形

假设通过 R 库networkD3生成网络图。进一步假设您可以将该网络图保存为外部独立 HTML 文件(请参阅输出部分),或者通过 R 库htmlwidgets呈现它。

您是否有任何方法可以将生成的网络导出为矢量图形(pdf 或 svg),无论是在 R 内部还是外部?

注意:我知道 D3.js 库的主要目的不是生成静态数据可视化,但肯定有一种方法可以使用/转换 D3 网络图进行印刷出版。

编辑 1:按照CJ Yetman 的建议,我通过 Firefox Developer Edition 检查了 HTML 文件的 DOM 属性。使用此方法,可以具体查看 SVG 属性(请参阅此示例),但它们大多是空的。但是,如何如 CJ Yetman 所示“从 DOM 中提取 SVG”

svg r vector-graphics d3.js networkd3

5
推荐指数
1
解决办法
1921
查看次数

R - 闪亮应用程序中visNetwork与networkd3的最新技术表现(2017)

我想根据它们的中心性在"大"图形(少于500个节点)上着色顶点,并允许用户删除点击事件上的边或顶点.删除顶点或边时,将在图上重新计算新的中心度分数,并再次渲染边和顶点的颜色.

我一直在关注visNetworknetworkD3 R软件包.这篇2015年的博客文章提到visNetwork比networkD3更具特色,但我读过几个提出networkD3如何改变和扩展其功能的SO问题.

在这两个包中的哪一个可以更简单地满足我的要求?

r graph-visualization shiny networkd3 visnetwork

4
推荐指数
1
解决办法
1161
查看次数

R networkD3:单击操作显示节点数据帧的信息

我有这个代码:

library(networkD3)

# Load data
data(MisLinks)
data(MisNodes)

new.nodes <- MisNodes
new.nodes$var1 <- runif(nrow(MisNodes),1,2)
new.nodes$var2 <- runif(nrow(MisNodes),1,2)

# Some script to show the node index in the new.nodes data frame
script <- 'alert("row: " + (d.index + 1));'

# Plot
forceNetwork(Links = MisLinks, Nodes = new.nodes,
             Source = "source", Target = "target",
             Value = "value", NodeID = "name",
             Group = "group", opacity = 0.8,
             clickAction = script)
Run Code Online (Sandbox Code Playgroud)

我想通了通过询问来获取节点数据帧的行号d.index + 1。但是我想显示一个包含所有节点信息的表,如下所示(也许格式更好):

    name group size     var1     var2
1 Myriel     1   15 …
Run Code Online (Sandbox Code Playgroud)

javascript networking r networkd3 htmlwidgets

4
推荐指数
1
解决办法
1546
查看次数