我在R中使用networkD3来显示我的数据(sankeyNetwork函数)。我遇到了几个似乎没有解决办法的问题。
问题1:如果节点名称相似,则使用相同的颜色,即使总共不同,例如,如果名称是1,“一二三”,“一三”。这里的名称是通过NodeID指定的。如果1被重命名为类似“二一三”的东西,那么这个问题就不再存在了。有没有一种方法可以像这样显示名字,并按它们应该的方式分配颜色呢?
问题2:没有小数显示在链接或节点的值中。当想要用小数显示百分比时,这个问题很烦人。如果一个值低于1% (或者可能是.5%),它只显示0%,所有的值都会舍入到下一个整数。有办法显示小数(2或3)吗?解决这一问题的方法是通过将数字相乘并替换小数分隔符来使数字变大,但对于这一点,我还没有找到一个完整的解决方案。答案here提供了替换链接中十进制分隔符的解决方案。但是,节点仍然像以前一样显示,单元符号被移除。
问题3:向节点“组”或步骤添加标题。我的数据设计的方式是,有三个时间步骤具有相同的节点(3个步骤中的每个节点都有8个节点)。如何在提供有关该“组”节点的自定义信息的每个步骤之上添加一个标题。(我认为NodeGroup可能与我所指的不同,因此引用了这些话)。
发布于 2022-05-10 15:57:48
{networkD3}在其JavaScript中有一个硬编码格式设置选项。你可以用你链接到的答案把它重置成你想要的.在.format(",.2f")位中关键地设置格式选项,在这种情况下,2意味着在小数点之后打印两位数字。
library(networkD3)
library(htmlwidgets)
nodes <- data.frame(name = c('a','b'))
links <- data.frame(source = 0, target = 1, value = 0.34)
p <- sankeyNetwork(
Links = links,
Source = "source",
Target = "target",
Value = "value",
Nodes = nodes,
NodeID = "name",
fontSize = 12,
nodeWidth = 30,
iterations = 0
)
customJS <- '
function(el,x) {
var link = d3.selectAll(".link");
var format = d3.formatLocale({"decimal": ",", "thousands": ".", "grouping": [3], "currency": ["", "\u00a0€"]}).format(",.2f");
link.select("title").select("body")
.html(function(d) { return "<pre>" + d.source.name + " \u2192 " + d.target.name +
"\\n" + format(d.value) + "<pre>"; });
}
'
onRender(p, customJS)

https://stackoverflow.com/questions/72129768
复制相似问题