@@ -5,6 +5,7 @@ var Axes = require('../../plots/cartesian/axes');
55var isNumeric = require ( 'fast-isnumeric' ) ;
66var BADNUM = require ( '../../constants/numerical' ) . BADNUM ;
77var scatterCalc = require ( '../scatter/calc' ) ;
8+ var colorscaleCalc = require ( '../../components/colorscale/calc' ) ;
89
910/**
1011 * Main calculation function for quiver trace
@@ -24,6 +25,12 @@ module.exports = function calc(gd, trace) {
2425 trace . _length = len ;
2526 var cd = new Array ( len ) ;
2627
28+ var normMin = Infinity ;
29+ var normMax = - Infinity ;
30+ var cMin = Infinity ;
31+ var cMax = - Infinity ;
32+ var hasC = Array . isArray ( trace . c ) ;
33+
2734 for ( var i = 0 ; i < len ; i ++ ) {
2835 var cdi = cd [ i ] = { i : i } ;
2936 var xValid = isNumeric ( xVals [ i ] ) ;
@@ -36,11 +43,36 @@ module.exports = function calc(gd, trace) {
3643 cdi . x = BADNUM ;
3744 cdi . y = BADNUM ;
3845 }
46+
47+ // track ranges for colorscale
48+ if ( hasC ) {
49+ var ci = trace . c [ i ] ;
50+ if ( isNumeric ( ci ) ) {
51+ if ( ci < cMin ) cMin = ci ;
52+ if ( ci > cMax ) cMax = ci ;
53+ }
54+ } else {
55+ var ui = ( trace . u && trace . u [ i ] ) || 0 ;
56+ var vi = ( trace . v && trace . v [ i ] ) || 0 ;
57+ var n = Math . sqrt ( ui * ui + vi * vi ) ;
58+ if ( isFinite ( n ) ) {
59+ if ( n < normMin ) normMin = n ;
60+ if ( n > normMax ) normMax = n ;
61+ }
62+ }
3963 }
4064
4165 // Ensure axes are expanded and categories registered like scatter traces do
4266 scatterCalc . calcAxisExpansion ( gd , trace , xa , ya , xVals , yVals ) ;
4367
68+ // Colorscale cmin/cmax computation: prefer provided c, else magnitude
69+ var vals = hasC ? [ cMin , cMax ] : [ normMin , normMax ] ;
70+ colorscaleCalc ( gd , trace , {
71+ vals : vals ,
72+ containerStr : '' ,
73+ cLetter : 'c'
74+ } ) ;
75+
4476 return cd ;
4577} ;
4678
0 commit comments