@@ -896,7 +896,7 @@ describe('calculated data and points', function() {
896
896
// oneOrientationTraces are traces for which swapping x/y is not supported
897
897
var oneOrientationTraces = [ 'ohlc' , 'candlestick' ] ;
898
898
899
- function makeData ( type , a , b , axName ) {
899
+ function makeData ( type , axName , a , b ) {
900
900
var input = [ a , b ] ;
901
901
var cat = input [ axName === 'yaxis' ? 1 : 0 ] ;
902
902
var data = input [ axName === 'yaxis' ? 0 : 1 ] ;
@@ -939,6 +939,10 @@ describe('calculated data and points', function() {
939
939
high : data ,
940
940
low : data ,
941
941
942
+ // For histogram
943
+ nbinsx : cat . length ,
944
+ nbinsy : data . length ,
945
+
942
946
// For waterfall
943
947
measure : measure ,
944
948
@@ -988,7 +992,7 @@ describe('calculated data and points', function() {
988
992
[ 'value ascending' , 'value descending' ] . forEach ( function ( categoryorder ) {
989
993
it ( 'sorts ' + axName + ' by ' + categoryorder + ' for trace type ' + trace . type , function ( done ) {
990
994
var data = [ 7 , 2 , 3 ] ;
991
- var baseMock = { data : [ makeData ( trace . type , cat , data , axName ) ] , layout : { } } ;
995
+ var baseMock = { data : [ makeData ( trace . type , axName , cat , data ) ] , layout : { } } ;
992
996
baseMock . layout [ axName ] = { type : 'category' , categoryorder : categoryorder } ;
993
997
994
998
// Set expectations
@@ -1007,7 +1011,7 @@ describe('calculated data and points', function() {
1007
1011
var type = trace . type ;
1008
1012
var data = [ 7 , 2 , 3 ] ;
1009
1013
var data2 = [ 5 , 4 , 2 ] ;
1010
- var baseMock = { data : [ makeData ( type , cat , data , axName ) , makeData ( type , cat , data2 , axName ) ] , layout : { } } ;
1014
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) ] , layout : { } } ;
1011
1015
baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'value ascending' } ;
1012
1016
1013
1017
var expectedAgg = [ [ 'a' , data [ 0 ] + data2 [ 0 ] ] , [ 'b' , data [ 1 ] + data2 [ 1 ] ] , [ 'c' , data [ 2 ] + data2 [ 2 ] ] ] ;
@@ -1021,7 +1025,7 @@ describe('calculated data and points', function() {
1021
1025
var type = trace . type ;
1022
1026
var data = [ 7 , 2 , 3 ] ;
1023
1027
var data2 = [ 5 , 4 , 2 ] ;
1024
- var baseMock = { data : [ makeData ( type , cat , data , axName ) , makeData ( type , cat , data2 , axName ) ] , layout : { } } ;
1028
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) ] , layout : { } } ;
1025
1029
baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'value ascending' } ;
1026
1030
1027
1031
// Hide second trace
@@ -1037,7 +1041,7 @@ describe('calculated data and points', function() {
1037
1041
var type = trace . type ;
1038
1042
var data = [ 7 , 2 , 3 ] ;
1039
1043
var data2 = [ 5 , 4 , 2 ] ;
1040
- var baseMock = { data : [ makeData ( type , cat , data , axName ) , makeData ( type , cat , data2 , axName ) ] , layout : { } } ;
1044
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) ] , layout : { } } ;
1041
1045
baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'min ascending' } ;
1042
1046
1043
1047
var expectedAgg = [ [ 'a' , Math . min ( data [ 0 ] , data2 [ 0 ] ) ] , [ 'b' , Math . min ( data [ 1 ] , data2 [ 1 ] ) ] , [ 'c' , Math . min ( data [ 2 ] , data2 [ 2 ] ) ] ] ;
@@ -1051,15 +1055,45 @@ describe('calculated data and points', function() {
1051
1055
var type = trace . type ;
1052
1056
var data = [ 7 , 2 , 3 ] ;
1053
1057
var data2 = [ 5 , 4 , 2 ] ;
1054
- var baseMock = { data : [ makeData ( type , cat , data , axName ) , makeData ( type , cat , data2 , axName ) ] , layout : { } } ;
1058
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) ] , layout : { } } ;
1055
1059
baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'max ascending' } ;
1056
1060
1057
1061
var expectedAgg = [ [ 'a' , Math . max ( data [ 0 ] , data2 [ 0 ] ) ] , [ 'b' , Math . max ( data [ 1 ] , data2 [ 1 ] ) ] , [ 'c' , Math . max ( data [ 2 ] , data2 [ 2 ] ) ] ] ;
1058
- if ( type === 'ohlc' || type === 'candlestick' ) expectedAgg = [ [ 'a' , expectedAgg [ 0 ] [ 1 ] ] , [ 'b' , expectedAgg [ 1 ] [ 1 ] ] , [ 'c' , expectedAgg [ 2 ] [ 1 ] ] ] ;
1059
1062
if ( type . match ( / h i s t o g r a m / ) ) expectedAgg = [ [ 'a' , 2 ] , [ 'b' , 1 ] , [ 'c' , 1 ] ] ;
1060
1063
1061
1064
checkAggregatedValue ( baseMock , expectedAgg , false , done ) ;
1062
1065
} ) ;
1066
+
1067
+ it ( 'take the mean of all values per category across traces of type ' + trace . type , function ( done ) {
1068
+ var type = trace . type ;
1069
+ var data = [ 7 , 2 , 3 ] ;
1070
+ var data2 = [ 5 , 4 , 2 ] ;
1071
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) ] , layout : { } } ;
1072
+ baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'mean ascending' } ;
1073
+
1074
+ var expectedAgg = [ [ 'a' , ( data [ 0 ] + data2 [ 0 ] ) / 2 ] , [ 'b' , ( data [ 1 ] + data2 [ 1 ] ) / 2 ] , [ 'c' , ( data [ 2 ] + data2 [ 2 ] ) / 2 ] ] ;
1075
+ if ( type === 'histogram' ) expectedAgg = [ [ 'a' , 2 ] , [ 'b' , 1 ] , [ 'c' , 1 ] ] ;
1076
+ if ( type === 'histogram2d' ) expectedAgg = [ [ 'a' , 2 / 3 ] , [ 'b' , 1 / 3 ] , [ 'c' , 1 / 3 ] ] ;
1077
+ if ( type === 'contour' || type === 'heatmap' ) expectedAgg = [ [ 'a' , expectedAgg [ 0 ] [ 1 ] / 3 ] , [ 'b' , expectedAgg [ 1 ] [ 1 ] / 3 ] , [ 'c' , expectedAgg [ 2 ] [ 1 ] / 3 ] ] ;
1078
+ if ( type === 'histogram2dcontour' ) expectedAgg = [ [ 'a' , 2 / 4 ] , [ 'b' , 1 / 4 ] , [ 'c' , 1 / 4 ] ] ; // TODO: this result is inintuitive
1079
+
1080
+ checkAggregatedValue ( baseMock , expectedAgg , false , done ) ;
1081
+ } ) ;
1082
+
1083
+ it ( 'take the median of all values per category across traces of type ' + trace . type , function ( done ) {
1084
+ var type = trace . type ;
1085
+ var data = [ 7 , 2 , 3 ] ;
1086
+ var data2 = [ 5 , 4 , 2 ] ;
1087
+ var data3 = [ 6 , 5 , 7 ] ;
1088
+ var baseMock = { data : [ makeData ( type , axName , cat , data ) , makeData ( type , axName , cat , data2 ) , makeData ( type , axName , cat , data3 ) ] , layout : { } } ;
1089
+ baseMock . layout [ axName ] = { type : 'category' , categoryorder : 'median ascending' } ;
1090
+
1091
+ var expectedAgg = [ [ 'a' , 6 ] , [ 'b' , 4 ] , [ 'c' , 3 ] ] ;
1092
+ if ( type === 'histogram' ) expectedAgg = [ [ 'a' , 2 ] , [ 'b' , 1 ] , [ 'c' , 1 ] ] ;
1093
+ if ( type === 'histogram2d' ) expectedAgg = [ [ 'a' , 1 ] , [ 'b' , 0 ] , [ 'c' , 0 ] ] ;
1094
+ if ( type === 'histogram2dcontour' || type === 'contour' || type === 'heatmap' ) expectedAgg = [ [ 'a' , 0 ] , [ 'b' , 0 ] , [ 'c' , 0 ] ] ;
1095
+ checkAggregatedValue ( baseMock , expectedAgg , false , done ) ;
1096
+ } ) ;
1063
1097
} ) ;
1064
1098
} ) ;
1065
1099
} ) ;
0 commit comments