@@ -28,8 +28,15 @@ module.exports = function hoverPoints(pointData, xval, yval) {
2828 var nx = Math . floor ( ( xval - cd0 . x0 ) / trace . dx ) ;
2929 var ny = Math . floor ( Math . abs ( yval - cd0 . y0 ) / trace . dy ) ;
3030
31+ var pixel ;
32+ if ( trace . _hasZ ) {
33+ pixel = cd0 . z [ ny ] [ nx ] ;
34+ } else if ( trace . _hasSource ) {
35+ pixel = trace . _canvas . el . getContext ( '2d' ) . getImageData ( nx , ny , 1 , 1 ) . data ;
36+ }
37+
3138 // return early if pixel is undefined
32- if ( ! cd0 . z [ ny ] [ nx ] ) return ;
39+ if ( ! pixel ) return ;
3340
3441 var hoverinfo = cd0 . hi || trace . hoverinfo ;
3542 var fmtColor ;
@@ -39,10 +46,11 @@ module.exports = function hoverPoints(pointData, xval, yval) {
3946 if ( parts . indexOf ( 'color' ) !== - 1 ) fmtColor = true ;
4047 }
4148
42- var colormodel = trace . colormodel ;
49+ var cr = constants . colormodel [ trace . colormodel ] ;
50+ var colormodel = cr . colormodel || trace . colormodel ;
4351 var dims = colormodel . length ;
44- var c = trace . _scaler ( cd0 . z [ ny ] [ nx ] ) ;
45- var s = constants . colormodel [ colormodel ] . suffix ;
52+ var c = trace . _scaler ( pixel ) ;
53+ var s = cr . suffix ;
4654
4755 var colorstring = [ ] ;
4856 if ( trace . hovertemplate || fmtColor ) {
@@ -64,7 +72,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
6472 var py = ya . c2p ( cd0 . y0 + ( ny + 0.5 ) * trace . dy ) ;
6573 var xVal = cd0 . x0 + ( nx + 0.5 ) * trace . dx ;
6674 var yVal = cd0 . y0 + ( ny + 0.5 ) * trace . dy ;
67- var zLabel = '[' + cd0 . z [ ny ] [ nx ] . slice ( 0 , trace . colormodel . length ) . join ( ', ' ) + ']' ;
75+ var zLabel = '[' + pixel . slice ( 0 , trace . colormodel . length ) . join ( ', ' ) + ']' ;
6876 return [ Lib . extendFlat ( pointData , {
6977 index : [ ny , nx ] ,
7078 x0 : xa . c2p ( cd0 . x0 + nx * trace . dx ) ,
0 commit comments