UNPKG

d3-bipartite

Version:

A D3 layout for drawing weighted bipartite graphs.

1 lines 1.84 kB
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("d3-array"),require("d3-collection"),require("d3-interpolate")):"function"==typeof define&&define.amd?define(["d3-array","d3-collection","d3-interpolate"],t):n.d3bipartite=t(n.d3,n.d3,n.d3)}(this,function(n,t,e){"use strict";function r(n){return n.source}function u(n){return n.target}function i(n){return n.value}function o(n){return n.value}function a(e,r){var u=t.nest().key(r).entries(e);return u.forEach(function(t){t.value=n.sum(t.values,o),t.max=n.max(t.values,o)}),u.sort(function(t,e){return n.descending(t.max,e.max)}),u}function c(t,e,r,u,i,a,c){var f,l,s,h=a+(u-e*(t.length-1)-n.sum(t,o)*c)/2;for(f=0;f<t.length;f++)s=o(l=t[f])*c,i?l[i]={x:r,y:h,height:s}:(l.x=r,l.y=h,l.height=s),h+=s+e}function f(t,e,r){return(e-r*(t.length-1))/n.sum(t,o)}return function(){var n,t=r,o=u,l=i,s=function(n){return{source:t(n),target:o(n),value:l(n),original:n}},h=5,d=100,g=100,v=function(t){var i=t.map(s),o=a(i,r),l=a(i,u);return n=Math.min(f(o,g,h),f(l,g,h)),c(o,h,0,g,null,0,n),o.forEach(function(t){c(t.values,0,0,t.height,"start",t.y,n)}),c(l,h,d,g,null,0,n),l.forEach(function(t){c(t.values,0,d,t.height,"end",t.y,n)}),i.forEach(function(t){var r,u,i,o,a,c,f,l,s;t.thickness=n*t.value,t.path=(u=.5,i=(r=t).start.x,o=r.end.x,a=e.interpolateNumber(i,o),c=a(u),f=a(1-u),l=r.start.y+r.thickness/2,s=r.end.y+r.thickness/2,"M"+i+","+l+"C"+c+","+l+" "+f+","+s+" "+o+","+s)}),{flows:i,sources:o,targets:l}};return v.width=function(n){return arguments.length?(d=n,v):d},v.height=function(n){return arguments.length?(g=n,v):g},v.source=function(n){return arguments.length?(t=n,v):t},v.target=function(n){return arguments.length?(o=n,v):o},v.value=function(n){return arguments.length?(l=n,v):l},v.padding=function(n){return arguments.length?(h=n,v):h},v}});