首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Sankey图转换

Sankey图转换
EN

Stack Overflow用户
提问于 2012-11-28 11:19:34
回答 2查看 4.4K关注 0票数 23

我想知道是否有一种简单的方法来修改Sankey diagram example,以便顺利过渡到新数据。例如,假设我有不同的数据文件(energy1.json、energy2.json ...)d3如何为第一个数据集绘制桑基图,然后等待,然后重新排列盒子部署以表示第二个数据集?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-21 00:49:21

这是可能的。这里有一种使用csv文件的方法。在这里工作的桑基:https://www.betterment.com/resources/investment-strategy/portfolio-management/portfolio-diversification/

  1. 在d3.csv调用之外定义一个全局数组。

var portfolioValues =[];

  • 解析csv以创建节点/链接结构时,将值推送到全局数组中。

}portfolioValues.push(项);graph.nodes.push({ "name":d.source });graph.nodes.push({ "name":d.target });graph.links.push({源: portfolioValuesi.source,目标: portfolioValuesi.target,值: portfolioValuesi.valuesstartingAllocation });});//构造sankey sankey .nodes(graph.nodes) .links(graph.links)更新并将用户输入传递给更新函数。

$(".sankey-slider").bind("slider:changed",function (event,data) { slideValue = data.value;updateData(parseInt(slideValue));});

  • 创建临时数组并从全局数组中检索正确的值。调用sankey函数重新计算布局。

var newLinks = [];portfolioValues.forEach(function(p,i) { newLinks.push({ source: p.source,target: p.target,value: p.valuesallocation });});graph.links = newLinks;sankey .nodes(graph.nodes) .links(graph.links) .size(width,height) .layout();

  • 选择需要更改的每个元素并传递新的数据值。

在这里工作的桑基:https://www.betterment.com/resources/investment-strategy/portfolio-management/portfolio-diversification/

票数 15
EN

Stack Overflow用户

发布于 2013-03-12 10:11:40

由于节点的自动定位包括在连通图中尝试最小化链接距离的部分,这是一个np优化问题,因此任何类型的优化器都可能从一个最小值跳到另一个最小值,从而导致布局的跳跃。因此,保证平稳过渡是不可能的。

最接近的可能解决方案可能是在两个输入数据集之间进行线性插值,从而生成一系列图形,这些图形(取决于数据)或多或少地平滑地从一个两个过渡到另一个。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13603832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文