@@ -28,8 +28,15 @@ module.exports = function hoverPoints(pointData, xval, yval) {
28
28
var nx = Math . floor ( ( xval - cd0 . x0 ) / trace . dx ) ;
29
29
var ny = Math . floor ( Math . abs ( yval - cd0 . y0 ) / trace . dy ) ;
30
30
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
+
31
38
// return early if pixel is undefined
32
- if ( ! cd0 . z [ ny ] [ nx ] ) return ;
39
+ if ( ! pixel ) return ;
33
40
34
41
var hoverinfo = cd0 . hi || trace . hoverinfo ;
35
42
var fmtColor ;
@@ -39,10 +46,11 @@ module.exports = function hoverPoints(pointData, xval, yval) {
39
46
if ( parts . indexOf ( 'color' ) !== - 1 ) fmtColor = true ;
40
47
}
41
48
42
- var colormodel = trace . colormodel ;
49
+ var cr = constants . colormodel [ trace . colormodel ] ;
50
+ var colormodel = cr . colormodel || trace . colormodel ;
43
51
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 ;
46
54
47
55
var colorstring = [ ] ;
48
56
if ( trace . hovertemplate || fmtColor ) {
@@ -64,7 +72,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
64
72
var py = ya . c2p ( cd0 . y0 + ( ny + 0.5 ) * trace . dy ) ;
65
73
var xVal = cd0 . x0 + ( nx + 0.5 ) * trace . dx ;
66
74
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 ( ', ' ) + ']' ;
68
76
return [ Lib . extendFlat ( pointData , {
69
77
index : [ ny , nx ] ,
70
78
x0 : xa . c2p ( cd0 . x0 + nx * trace . dx ) ,
0 commit comments