@@ -871,11 +871,27 @@ var hivtrace_cluster_network_graph = function (
871
871
mapped_clusters = _ . omit ( mapped_clusters , self . exclude_cluster_ids ) ;
872
872
}
873
873
874
- d_clusters . children = _ . map ( mapped_clusters , ( value , key ) => ( {
874
+ let all_clusters = _ . map ( mapped_clusters , ( value , key ) => ( {
875
875
cluster_id : key ,
876
876
children : value ,
877
877
} ) ) ;
878
878
879
+ if ( _ . size ( mapped_clusters ) > max_points_to_render ) {
880
+ let reduced_clusters = _ . chain ( all_clusters )
881
+ . pairs ( )
882
+ . sortBy ( ( d ) => ( - d . children ? d . children . length : 0 ) )
883
+ . value ( ) ;
884
+ d_clusters . children = [ ] ;
885
+ for ( let i = 0 ; i < max_points_to_render ; i ++ ) {
886
+ d_clusters . children . push ( {
887
+ cluster_id : reduced_clusters [ i ] [ 0 ] ,
888
+ children : reduced_clusters [ i ] [ 1 ] ,
889
+ } ) ;
890
+ }
891
+ } else {
892
+ d_clusters . children = all_clusters ;
893
+ }
894
+
879
895
var treemap = packed
880
896
? d3 . layout
881
897
. pack ( )
@@ -895,10 +911,7 @@ var hivtrace_cluster_network_graph = function (
895
911
. ratio ( 1 ) ;
896
912
897
913
var clusters = treemap . nodes ( d_clusters ) ;
898
- _ . each ( clusters , ( c ) => {
899
- //c.fixed = true;
900
- } ) ;
901
- return clusters ;
914
+ return [ clusters , all_clusters ] ;
902
915
}
903
916
904
917
function prepare_data_to_graph ( ) {
@@ -1489,16 +1502,11 @@ var hivtrace_cluster_network_graph = function (
1489
1502
function default_layout ( packed ) {
1490
1503
// let's create an array of clusters from the json
1491
1504
1492
- var init_layout = get_initial_xy ( packed ) ;
1505
+ let [ init_layout , cluster_set ] = get_initial_xy ( packed ) ;
1493
1506
1494
1507
if ( self . clusters . length === 0 ) {
1495
- self . clusters = init_layout . filter ( ( v , i , obj ) => {
1496
- if ( ! ( typeof v . cluster_id === "undefined" ) ) {
1497
- return true ;
1498
- }
1499
- return false ;
1500
- } ) ;
1501
- } else {
1508
+ self . clusters = cluster_set ;
1509
+ } /*else {
1502
1510
var coordinate_update = {};
1503
1511
_.each(self.clusters, (c) => {
1504
1512
coordinate_update[c.cluster_id] = c;
@@ -1508,18 +1516,28 @@ var hivtrace_cluster_network_graph = function (
1508
1516
_.extendOwn(coordinate_update[c.cluster_id], c);
1509
1517
}
1510
1518
});
1511
- }
1519
+ }*/
1512
1520
1513
1521
//var sizes = network_layout.size();
1514
1522
1515
1523
var set_init_coords = packed
1516
1524
? function ( n ) {
1517
- n . x += n . r * 0.5 ;
1518
- n . y += n . r * 0.5 ;
1525
+ if ( "x" in n ) {
1526
+ n . x += n . r * 0.5 ;
1527
+ n . y += n . r * 0.5 ;
1528
+ } else {
1529
+ n . x = Math . random ( ) * self . width ;
1530
+ n . y = Math . random ( ) * self . height ;
1531
+ }
1519
1532
}
1520
1533
: function ( n ) {
1521
- n . x += n . dx * 0.5 ;
1522
- n . y += n . dy * 0.5 ;
1534
+ if ( "x" in n ) {
1535
+ n . x += n . dx * 0.5 ;
1536
+ n . y += n . dy * 0.5 ;
1537
+ } else {
1538
+ n . x = Math . random ( ) * self . width ;
1539
+ n . y = Math . random ( ) * self . height ;
1540
+ }
1523
1541
} ;
1524
1542
1525
1543
_ . each ( [ self . nodes , self . clusters ] , ( list ) => {
@@ -2780,7 +2798,7 @@ var hivtrace_cluster_network_graph = function (
2780
2798
console . log ( err ) ;
2781
2799
}
2782
2800
2783
- self . _aux_populate_category_menus = function ( ) {
2801
+ self . _aux_populate_category_menus = function ( subset ) {
2784
2802
if ( button_bar_ui ) {
2785
2803
// decide if the variable can be considered categorical by examining its range
2786
2804
@@ -2790,22 +2808,28 @@ var hivtrace_cluster_network_graph = function (
2790
2808
graph_data [ kGlobals . network . GraphAttrbuteID ] ,
2791
2809
self . _aux_populate_category_fields
2792
2810
) ,
2793
- ( d ) =>
2811
+ ( d , k ) =>
2794
2812
/*if (d.discrete) {
2795
2813
console.log (d["value_range"].length);
2796
2814
}*/
2797
- d . discrete &&
2798
- "value_range" in d &&
2799
- /*d["value_range"].length <= kGlobals.MaximumValuesInCategories &&*/
2800
- ! d [ "_hidden_" ]
2815
+ {
2816
+ return (
2817
+ d . discrete &&
2818
+ "value_range" in d &&
2819
+ /*d["value_range"].length <= kGlobals.MaximumValuesInCategories &&*/
2820
+ ! d [ "_hidden_" ] &&
2821
+ ( ! subset || subset . has ( d [ "raw_attribute_key" ] ) )
2822
+ ) ;
2823
+ }
2801
2824
) ;
2802
2825
2803
2826
var valid_shapes = _ . filter (
2804
2827
valid_cats ,
2805
2828
( d ) =>
2806
- ( d . discrete && d . dimension <= 7 ) ||
2807
- ( d [ "raw_attribute_key" ] in self . networkShapeScheme &&
2808
- ! d [ "_hidden_" ] )
2829
+ ( ! subset || subset . has ( d [ "raw_attribute_key" ] ) ) &&
2830
+ ( ( d . discrete && d . dimension <= 7 ) ||
2831
+ ( d [ "raw_attribute_key" ] in self . networkShapeScheme &&
2832
+ ! d [ "_hidden_" ] ) )
2809
2833
) ;
2810
2834
2811
2835
// sort values alphabetically for consistent coloring
@@ -2830,13 +2854,15 @@ var hivtrace_cluster_network_graph = function (
2830
2854
2831
2855
function determine_scaling ( d , values , scales ) {
2832
2856
var low_var = Infinity ;
2857
+ d [ "value_range" ] = d3 . extent ( values ) ;
2833
2858
_ . each ( scales , ( scl , i ) => {
2834
- d [ "value_range" ] = d3 . extent ( values ) ;
2835
2859
var bins = _ . map ( _ . range ( color_stops ) , ( ) => 0 ) ;
2836
2860
scl . range ( [ 0 , color_stops - 1 ] ) . domain ( d [ "value_range" ] ) ;
2837
- _ . each ( values , ( v ) => {
2838
- bins [ Math . floor ( scl ( v ) ) ] ++ ;
2839
- } ) ;
2861
+
2862
+ let N = values . length ;
2863
+ while ( N -- ) {
2864
+ bins [ ~ ~ scl ( values [ N ] ) ] ++ ; // truncate the value
2865
+ }
2840
2866
2841
2867
var mean = values . length / color_stops ;
2842
2868
var vrnc = _ . reduce (
@@ -2854,12 +2880,25 @@ var hivtrace_cluster_network_graph = function (
2854
2880
d [ "raw_attribute_key" ] = k ;
2855
2881
2856
2882
if ( d . type === "Number" || d . type === "Number-categories" ) {
2857
- var values = _ . filter (
2883
+ var values = [ ] ;
2884
+
2885
+ let N = self . json . Nodes . length ;
2886
+ while ( N -- ) {
2887
+ const v = self . attribute_node_value_by_id (
2888
+ self . json . Nodes [ N ] ,
2889
+ k ,
2890
+ d . type === "Number"
2891
+ ) ;
2892
+ if ( _ . isNumber ( v ) ) {
2893
+ values . push ( v ) ;
2894
+ }
2895
+ }
2896
+ /*_.filter(
2858
2897
_.map(graph_data.Nodes, (nd) =>
2859
2898
self.attribute_node_value_by_id(nd, k, d.type === "Number")
2860
2899
),
2861
2900
(v) => _.isNumber(v)
2862
- ) ;
2901
+ );*/
2863
2902
// automatically determine the scale and see what spaces the values most evenly
2864
2903
const range = d3 . extent ( values ) ;
2865
2904
@@ -3629,6 +3668,13 @@ var hivtrace_cluster_network_graph = function (
3629
3668
3630
3669
if ( container ) {
3631
3670
node_list = node_list || self . aggregate_indvidual_level_records ( ) ;
3671
+
3672
+ const N = node_list . length ;
3673
+
3674
+ if ( node_list . length > max_nodes_to_show ) {
3675
+ node_list = node_list . slice ( 0 , max_nodes_to_show ) ;
3676
+ }
3677
+
3632
3678
var column_ids = self . _extract_exportable_attributes ( true ) ;
3633
3679
3634
3680
self . displayed_node_subset = _ . filter (
@@ -3819,7 +3865,8 @@ var hivtrace_cluster_network_graph = function (
3819
3865
[ table_headers ] ,
3820
3866
table_rows ,
3821
3867
container ,
3822
- 'Showing <span class="badge" data-hivtrace-ui-role="table-count-shown">--</span>/<span class="badge" data-hivtrace-ui-role="table-count-total">--</span> network entities'
3868
+ 'Showing <span class="badge" data-hivtrace-ui-role="table-count-shown">--</span>/<span class="badge" data-hivtrace-ui-role="table-count-total">--</span> network entities <span class="label label-warning" data-hivtrace-ui-role="table-count-warning"></span>' ,
3869
+ N
3823
3870
) ;
3824
3871
}
3825
3872
} ;
@@ -3965,13 +4012,16 @@ var hivtrace_cluster_network_graph = function (
3965
4012
headers ,
3966
4013
rows ,
3967
4014
container ,
3968
- table_caption
4015
+ table_caption ,
4016
+ ND
3969
4017
) {
3970
4018
container = container || nodesTab . getNodeTable ( ) ;
3971
4019
3972
4020
if ( container ) {
3973
4021
node_list = node_list || self . nodes ;
3974
4022
4023
+ ND = ND || node_list . length ;
4024
+
3975
4025
if ( ! headers ) {
3976
4026
headers = [
3977
4027
[
@@ -4065,8 +4115,8 @@ var hivtrace_cluster_network_graph = function (
4065
4115
rows ,
4066
4116
true ,
4067
4117
table_caption ,
4068
- clustersOfInterest . get_editor ( )
4069
- // rows
4118
+ clustersOfInterest . get_editor ( ) ,
4119
+ ND
4070
4120
) ;
4071
4121
}
4072
4122
} ;
@@ -5802,13 +5852,13 @@ var hivtrace_cluster_network_graph = function (
5802
5852
12
5803
5853
) ;
5804
5854
5805
- try {
5855
+ /* try {
5806
5856
if (self.isPrimaryGraph) {
5807
5857
self.priority_groups_compute_node_membership();
5808
5858
}
5809
5859
} catch (err) {
5810
5860
console.log(err);
5811
- }
5861
+ }*/
5812
5862
}
5813
5863
5814
5864
if (
@@ -6551,11 +6601,19 @@ var hivtrace_cluster_network_graph = function (
6551
6601
6552
6602
if ( d [ "type" ] === "String" ) {
6553
6603
d . discrete = true ;
6554
- d [ "value_range" ] = _ . keys (
6604
+ d [ "value_range" ] = new Set ( ) ;
6605
+
6606
+ graph_data . Nodes . forEach ( ( nd ) => {
6607
+ d [ "value_range" ] . add ( self . attribute_node_value_by_id ( nd , k ) ) ;
6608
+ } ) ;
6609
+
6610
+ /*_.keys(
6555
6611
_.countBy(graph_data.Nodes, (nd) =>
6556
6612
self.attribute_node_value_by_id(nd, k)
6557
6613
)
6558
- ) ;
6614
+ );*/
6615
+
6616
+ d [ "value_range" ] = [ ...d [ "value_range" ] ] ;
6559
6617
d [ "dimension" ] = d [ "value_range" ] . length ;
6560
6618
}
6561
6619
return d ;
@@ -7772,7 +7830,8 @@ var hivtrace_cluster_network_graph = function (
7772
7830
7773
7831
var l_scale = 5000 , // link scale
7774
7832
graph_data = self . json , // the raw JSON network object
7775
- max_points_to_render = 2048 ,
7833
+ max_points_to_render = 1536 ,
7834
+ max_nodes_to_show = 16384 ,
7776
7835
singletons = 0 ,
7777
7836
open_cluster_queue = [ ] ,
7778
7837
currently_displayed_objects ,
0 commit comments