@@ -40,7 +40,8 @@ import {
4040 circleNodeGenerator ,
4141 areaLink ,
4242 ribbonLink ,
43- circularAreaLink
43+ circularAreaLink ,
44+ radialLabelGenerator
4445} from "./svg/networkDrawing"
4546
4647import { stringToFn } from "./data/dataFunctions"
@@ -190,11 +191,11 @@ function determineNodeIcon(baseCustomNodeIcon, networkSettings, size) {
190191 return sankeyNodeGenerator
191192 case "partition" :
192193 return networkSettings . projection === "radial"
193- ? radialRectNodeGenerator ( size , center )
194+ ? radialRectNodeGenerator ( size , center , networkSettings )
194195 : hierarchicalRectNodeGenerator
195196 case "treemap" :
196197 return networkSettings . projection === "radial"
197- ? radialRectNodeGenerator ( size , center )
198+ ? radialRectNodeGenerator ( size , center , networkSettings )
198199 : hierarchicalRectNodeGenerator
199200 case "circlepack" :
200201 return circleNodeGenerator
@@ -450,7 +451,8 @@ type Props = {
450451 onNodeOut ?: Function ,
451452 onNodeClick ?: Function ,
452453 onNodeEnter ?: Function ,
453- renderOrder ?: $ReadOnlyArray < "edges" | "nodes" >
454+ renderOrder ?: $ReadOnlyArray < "edges" | "nodes" > ,
455+ filterRenderedNodes : Function
454456}
455457
456458class NetworkFrame extends React . Component < Props , State > {
@@ -461,7 +463,8 @@ class NetworkFrame extends React.Component<Props, State> {
461463 size : [ 500 , 500 ] ,
462464 className : "" ,
463465 name : "networkframe" ,
464- networkType : { type : "force" , iterations : 500 }
466+ networkType : { type : "force" , iterations : 500 } ,
467+ filterRenderedNodes : ( ) => true
465468 }
466469
467470 static displayName = "NetworkFrame"
@@ -579,7 +582,8 @@ class NetworkFrame extends React.Component<Props, State> {
579582 margin : baseMargin ,
580583 hoverAnnotation,
581584 customNodeIcon : baseCustomNodeIcon ,
582- customEdgeIcon : baseCustomEdgeIcon
585+ customEdgeIcon : baseCustomEdgeIcon ,
586+ filterRenderedNodes
583587 } = currentProps
584588
585589 let { edgeType } = currentProps
@@ -865,11 +869,14 @@ class NetworkFrame extends React.Component<Props, State> {
865869 radialProjectable [ networkSettings . type ] &&
866870 networkSettings . projection === "radial"
867871 ) {
868- const radialPoint = pointOnArcAtAngle (
869- [ adjustedSize [ 0 ] / 2 , adjustedSize [ 1 ] / 2 ] ,
870- node . x / adjustedSize [ 0 ] ,
871- node . y / 2
872- )
872+ const radialPoint =
873+ node . depth === 0
874+ ? [ adjustedSize [ 0 ] / 2 , adjustedSize [ 1 ] / 2 ]
875+ : pointOnArcAtAngle (
876+ [ adjustedSize [ 0 ] / 2 , adjustedSize [ 1 ] / 2 ] ,
877+ node . x / adjustedSize [ 0 ] ,
878+ node . y / 2
879+ )
873880 node . x = radialPoint [ 0 ]
874881 node . y = radialPoint [ 1 ]
875882 } else {
@@ -1285,6 +1292,14 @@ class NetworkFrame extends React.Component<Props, State> {
12851292 this . state . graphSettings . edges = currentProps . edges
12861293 }
12871294
1295+ //filter out user-defined nodes
1296+ projectedNodes = projectedNodes . filter ( filterRenderedNodes )
1297+ projectedEdges = projectedEdges . filter (
1298+ d =>
1299+ projectedNodes . indexOf ( d . target ) !== - 1 &&
1300+ projectedNodes . indexOf ( d . source ) !== - 1
1301+ )
1302+
12881303 if ( networkSettings . direction === "flip" ) {
12891304 projectedNodes . forEach ( node => {
12901305 // const ox = node.x
@@ -1320,8 +1335,9 @@ class NetworkFrame extends React.Component<Props, State> {
13201335 networkSettings . type !== "wordcloud" &&
13211336 networkSettings . type !== "chord" &&
13221337 networkSettings . type !== "sankey" &&
1323- ( hierarchicalTypeHash [ networkSettings . type ] === undefined ||
1324- networkSettings . nodeSize )
1338+ networkSettings . type !== "partition" &&
1339+ networkSettings . type !== "treemap" &&
1340+ networkSettings . type !== "circlepack"
13251341 ) {
13261342 const xMin = min ( projectedNodes . map ( p => p . x - nodeSizeAccessor ( p ) ) )
13271343 const xMax = max ( projectedNodes . map ( p => p . x + nodeSizeAccessor ( p ) ) )
@@ -1330,13 +1346,38 @@ class NetworkFrame extends React.Component<Props, State> {
13301346
13311347 const projectionScaleX = scaleLinear ( )
13321348 . domain ( [ xMin , xMax ] )
1333- . range ( [ 0 , adjustedSize [ 0 ] ] )
1349+ . range ( [ margin . left , adjustedSize [ 0 ] - margin . right ] )
1350+ const projectionScaleY = scaleLinear ( )
1351+ . domain ( [ yMin , yMax ] )
1352+ . range ( [ margin . top , adjustedSize [ 1 ] - margin . bottom ] )
1353+ projectedNodes . forEach ( node => {
1354+ node . x = projectionScaleX ( node . x )
1355+ node . y = projectionScaleY ( node . y )
1356+ } )
1357+ } else if (
1358+ networkSettings . zoom !== false &&
1359+ networkSettings . projection !== "radial" &&
1360+ ( networkSettings . type === "partition" ||
1361+ networkSettings . type === "treemap" )
1362+ ) {
1363+ const xMin = min ( projectedNodes . map ( p => p . x0 ) )
1364+ const xMax = max ( projectedNodes . map ( p => p . x1 ) )
1365+ const yMin = min ( projectedNodes . map ( p => p . y0 ) )
1366+ const yMax = max ( projectedNodes . map ( p => p . y1 ) )
1367+
1368+ const projectionScaleX = scaleLinear ( )
1369+ . domain ( [ xMin , xMax ] )
1370+ . range ( [ margin . left , adjustedSize [ 0 ] - margin . right ] )
13341371 const projectionScaleY = scaleLinear ( )
13351372 . domain ( [ yMin , yMax ] )
1336- . range ( [ 0 , adjustedSize [ 1 ] ] )
1373+ . range ( [ margin . top , adjustedSize [ 1 ] - margin . bottom ] )
13371374 projectedNodes . forEach ( node => {
13381375 node . x = projectionScaleX ( node . x )
13391376 node . y = projectionScaleY ( node . y )
1377+ node . x0 = projectionScaleX ( node . x0 )
1378+ node . y0 = projectionScaleY ( node . y0 )
1379+ node . x1 = projectionScaleX ( node . x1 )
1380+ node . y1 = projectionScaleY ( node . y1 )
13401381 } )
13411382 }
13421383
@@ -1408,9 +1449,17 @@ class NetworkFrame extends React.Component<Props, State> {
14081449 projectedNodes . forEach ( ( node , nodei ) => {
14091450 if ( nodeLabels === true || ( nodeLabels && nodeLabels ( node , nodei ) ) ) {
14101451 const actualLabel =
1411- nodeLabels === true
1412- ? nodeIDAccessor ( node , nodei )
1413- : nodeLabels ( node , nodei )
1452+ networkSettings . projection === "radial" && node . depth !== 0
1453+ ? radialLabelGenerator (
1454+ node ,
1455+ nodei ,
1456+ nodeLabels === true ? nodeIDAccessor : nodeLabels ,
1457+ adjustedSize ,
1458+ networkSettings
1459+ )
1460+ : nodeLabels === true
1461+ ? nodeIDAccessor ( node , nodei )
1462+ : nodeLabels ( node , nodei )
14141463
14151464 let nodeLabel
14161465
0 commit comments