我想制作一个图表,其中不同的链接类别有不同的颜色,我用它作为输入(样本):
source target cat weight
<fctr> <fctr> <chr> <dbl>
1 human water 1 30
2 human water 2 49
3 human water 3 2
4 human water 4 14
5 human water 5 19
Run Code Online (Sandbox Code Playgroud)
然后我将这些数据转换为节点,链接和link.colors并绘制它,这将给出:

正如您在此网络中看到的,链接是相互叠加的.因此,不可能看到差异.所以我想绘制彼此相邻的链接,而不是相互叠加.
我无法提供整个数据集,但我想一个简单的例子就足够了:
library(networkD3)
link <- read.table(text = ' source target value
1 0 1 30
2 0 1 49', header = T)
nodes <- read.table(text = ' name group size
1 human 1 10
2 water 1 10', header = T)
link.colors <- c('#e6194b','#3cb44b')
network …Run Code Online (Sandbox Code Playgroud) 我试图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).
我想我在包中发现了一个错误或更确切地说缺少更新countrycode:
library(countrycode)
testData <- data.frame(country=c(rep("Germany",3),rep("Kosovo",3)))
testData$iso3 <- countrycode(testData$country, "country.name", "iso3c")
Run Code Online (Sandbox Code Playgroud)
这不仅是出于政治原因,而且因为国际货币基金组织或国际清算银行等国际组织确实将科索沃纳入其数据集,因此存在问题。Countrycode 将NA's在此处生成。
我如何处理这些信息?我认为iso3c应该是KSV。
编辑:我联系了包维护者,他回答说,在科索沃得到正式承认之前,他宁愿保持这种方式。
我正在尝试对使用R 中的networkd3 绘制的网络图进行一些调整forcenetwork。
特别是,我想将文本标签颜色更改为黑色(或白色,黑色背景)并将文本标签带到节点的前面。标准选项使得阅读文本标签变得非常困难,因为有些标签颜色太浅,而另一些则被密集的节点簇挡住了。
如果我也可以更改图例文本颜色,那就太好了,这样我就可以灵活地更改背景颜色。
一个可能的解决方案,在这篇文章中指出,在这里,是劫持一些未使用的参数。
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8,
linkDistance =
JS('function(){d3.select("body").style("background-color", "#DAE3F9");return 50;}'))
Run Code Online (Sandbox Code Playgroud)
但是,由于对 JS 一无所知,我不知道如何编写它,甚至不知道它是否可能。
我正在尝试创建一个简单的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) 我正在尝试从子窗口刷新父窗口。在子窗口中使用以下代码,该代码驻留在 HTML 小部件中。
parent.parent.window.opener.location.reload()
Run Code Online (Sandbox Code Playgroud)
我没有在父页面中添加任何代码,因为它是一个 Moodle PHP 页面。如果两个窗口位于同一原点,则此代码可以正常工作。我不想跟去post-message()。因为我不想触及父窗口代码。你能帮我吗?只是为了刷新页面!!
我正在尝试使用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) 目前,我正在尝试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)
为了向您概述我的数据,请点击此处截图:

我会给你更多"编码"信息,但由于我对RI这个话题很新,希望你能在这个问题上跟随我的思路.如果没有,请不要犹豫不决.
谢谢 :)
这确实是这个问题的重复 r-split-string-using-tidyrseparate,但我不能将 MWE 用于我的目的,因为我不知道如何调整正则表达式。我基本上想要同样的东西,但在最后一个下划线之后分割变量。
原因:我的数据中某些列针对相同因素/类型多次出现。我想我可以将数据在类型字符串之前将值变量分开,然后将其再次展开为具有较少列的宽格式。我的问题是我的变量名有不同的几个下划线,我想学习如何在我事先添加的最后一个下划线之后分隔。
微量元素
library(tidyr)
library(data.table)
dt<-data.table(Name=c("A","B","C"),Var_1_EVU=c(2,NA,NA),Var_1_BdS=c(NA,3,4),Var_2_BdS=c(NA,3,4))
dt.long<-melt(dt, id.vars=c("Name"))
dt.long<-separate(dt.long,variable, c("test","type"), sep='/[^_]*$/')
dt.wide<-spread(dt.long,key=Name,value=value)
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
Name type Var1 Var2
1: A BdS NA NA
2: A EVU 2 NA
3: B BdS 3 3
4: B EVU NA NA
5: C BdS 4 4
6: C EVU NA NA
Run Code Online (Sandbox Code Playgroud) 我想重点关注上面的流程,将蓝色的"热量发电"块连接到粉红色的"电网"块.你会注意到流量是526 TWh,这是#62行Energy$links.
Energy$links
source target value
...
62 26 15 525.531
...
Run Code Online (Sandbox Code Playgroud)
现在让我们关注引用节点的source和target值Energy$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)