@@ -36,6 +36,7 @@ var BADNUM = constants.BADNUM;
36
36
37
37
var ZERO_PATH = { K : 'zeroline' } ;
38
38
var GRID_PATH = { K : 'gridline' , L : 'path' } ;
39
+ var MINORGRID_PATH = { K : 'minor-gridline' , L : 'path' } ;
39
40
var TICK_PATH = { K : 'tick' , L : 'path' } ;
40
41
var TICK_TEXT = { K : 'tick' , L : 'text' } ;
41
42
@@ -2196,6 +2197,7 @@ axes.draw = function(gd, arg, opts) {
2196
2197
plotinfo . xaxislayer . selectAll ( '.' + xa . _id + 'divider' ) . remove ( ) ;
2197
2198
plotinfo . yaxislayer . selectAll ( '.' + ya . _id + 'divider' ) . remove ( ) ;
2198
2199
2200
+ if ( plotinfo . minorGridlayer ) plotinfo . minorGridlayer . selectAll ( 'path' ) . remove ( ) ;
2199
2201
if ( plotinfo . gridlayer ) plotinfo . gridlayer . selectAll ( 'path' ) . remove ( ) ;
2200
2202
if ( plotinfo . zerolinelayer ) plotinfo . zerolinelayer . selectAll ( 'path' ) . remove ( ) ;
2201
2203
@@ -2349,6 +2351,7 @@ axes.drawOne = function(gd, ax, opts) {
2349
2351
vals : gridVals ,
2350
2352
counterAxis : counterAxis ,
2351
2353
layer : plotinfo . gridlayer . select ( '.' + axId ) ,
2354
+ minorLayer : plotinfo . minorGridlayer . select ( '.' + axId ) ,
2352
2355
path : gridPath ,
2353
2356
transFn : transTickFn
2354
2357
} ) ;
@@ -3124,26 +3127,16 @@ axes.drawGrid = function(gd, ax, opts) {
3124
3127
var cls = ax . _id + 'grid' ;
3125
3128
3126
3129
var hasMinor = ax . minor && ax . minor . showgrid ;
3127
-
3128
- var vals = [ ]
3129
- . concat ( hasMinor ?
3130
- // minor vals
3131
- opts . vals . filter ( function ( d ) { return d . minor ; } ) :
3132
- [ ]
3133
- )
3134
- . concat ( ax . showgrid ?
3135
- // major vals
3136
- opts . vals . filter ( function ( d ) { return ! d . minor ; } ) :
3137
- [ ]
3138
- ) ;
3130
+ var minorVals = hasMinor ? opts . vals . filter ( function ( d ) { return d . minor ; } ) : [ ] ;
3131
+ var majorVals = ax . showgrid ? opts . vals . filter ( function ( d ) { return ! d . minor ; } ) : [ ] ;
3139
3132
3140
3133
var counterAx = opts . counterAxis ;
3141
3134
if ( counterAx && axes . shouldShowZeroLine ( gd , ax , counterAx ) ) {
3142
3135
var isArrayMode = ax . tickmode === 'array' ;
3143
- for ( var i = 0 ; i < vals . length ; i ++ ) {
3144
- var xi = vals [ i ] . x ;
3136
+ for ( var i = 0 ; i < majorVals . length ; i ++ ) {
3137
+ var xi = majorVals [ i ] . x ;
3145
3138
if ( isArrayMode ? ! xi : ( Math . abs ( xi ) < ax . dtick / 100 ) ) {
3146
- vals = vals . slice ( 0 , i ) . concat ( vals . slice ( i + 1 ) ) ;
3139
+ majorVals = majorVals . slice ( 0 , i ) . concat ( majorVals . slice ( i + 1 ) ) ;
3147
3140
// In array mode you can in principle have multiple
3148
3141
// ticks at 0, so test them all. Otherwise once we found
3149
3142
// one we can stop.
@@ -3153,42 +3146,50 @@ axes.drawGrid = function(gd, ax, opts) {
3153
3146
}
3154
3147
}
3155
3148
3156
- var grid = opts . layer . selectAll ( 'path.' + cls )
3157
- . data ( vals , tickDataFn ) ;
3149
+ ax . _gw =
3150
+ Drawing . crispRound ( gd , ax . gridwidth , 1 ) ;
3158
3151
3159
- grid . exit ( ) . remove ( ) ;
3152
+ var wMinor = ! hasMinor ? 0 :
3153
+ Drawing . crispRound ( gd , ax . minor . gridwidth , 1 ) ;
3160
3154
3161
- grid . enter ( ) . append ( 'path' )
3162
- . classed ( cls , 1 )
3163
- . classed ( 'crisp' , opts . crisp !== false ) ;
3155
+ var majorLayer = opts . layer ;
3156
+ var minorLayer = opts . minorLayer ;
3157
+ for ( var major = 1 ; major >= 0 ; major -- ) {
3158
+ var layer = major ? majorLayer : minorLayer ;
3159
+ if ( ! layer ) continue ;
3164
3160
3165
- ax . _gw = Drawing . crispRound ( gd , ax . gridwidth , 1 ) ;
3161
+ var grid = layer . selectAll ( 'path.' + cls )
3162
+ . data ( major ? majorVals : minorVals , tickDataFn ) ;
3166
3163
3167
- var wMinor ;
3168
- if ( hasMinor ) wMinor = Drawing . crispRound ( gd , ax . minor . gridwidth , 1 ) ;
3164
+ grid . exit ( ) . remove ( ) ;
3169
3165
3170
- grid . attr ( 'transform' , opts . transFn )
3171
- . attr ( 'd' , opts . path )
3172
- . each ( function ( d ) {
3173
- return Color . stroke ( d3 . select ( this ) , d . minor ?
3174
- ax . minor . gridcolor :
3175
- ( ax . gridcolor || '#ddd' )
3176
- ) ;
3177
- } )
3178
- . style ( 'stroke-dasharray' , function ( d ) {
3179
- return Drawing . dashStyle (
3180
- d . minor ? ax . minor . griddash : ax . griddash ,
3181
- d . minor ? ax . minor . gridwidth : ax . gridwidth
3182
- ) ;
3183
- } )
3184
- . style ( 'stroke-width' , function ( d ) {
3185
- return ( d . minor ? wMinor : ax . _gw ) + 'px' ;
3186
- } )
3187
- . style ( 'display' , null ) ; // visible
3166
+ grid . enter ( ) . append ( 'path' )
3167
+ . classed ( cls , 1 )
3168
+ . classed ( 'crisp' , opts . crisp !== false ) ;
3169
+
3170
+ grid . attr ( 'transform' , opts . transFn )
3171
+ . attr ( 'd' , opts . path )
3172
+ . each ( function ( d ) {
3173
+ return Color . stroke ( d3 . select ( this ) , d . minor ?
3174
+ ax . minor . gridcolor :
3175
+ ( ax . gridcolor || '#ddd' )
3176
+ ) ;
3177
+ } )
3178
+ . style ( 'stroke-dasharray' , function ( d ) {
3179
+ return Drawing . dashStyle (
3180
+ d . minor ? ax . minor . griddash : ax . griddash ,
3181
+ d . minor ? ax . minor . gridwidth : ax . gridwidth
3182
+ ) ;
3183
+ } )
3184
+ . style ( 'stroke-width' , function ( d ) {
3185
+ return ( d . minor ? wMinor : ax . _gw ) + 'px' ;
3186
+ } )
3187
+ . style ( 'display' , null ) ; // visible
3188
3188
3189
- hideCounterAxisInsideTickLabels ( ax , [ GRID_PATH ] ) ;
3189
+ if ( typeof opts . path === 'function' ) grid . attr ( 'd' , opts . path ) ;
3190
+ }
3190
3191
3191
- if ( typeof opts . path === 'function' ) grid . attr ( 'd' , opts . path ) ;
3192
+ hideCounterAxisInsideTickLabels ( ax , [ GRID_PATH , MINORGRID_PATH ] ) ;
3192
3193
} ;
3193
3194
3194
3195
/**
@@ -3455,6 +3456,7 @@ axes.drawLabels = function(gd, ax, opts) {
3455
3456
if ( anchorAx && insideTicklabelposition ( anchorAx ) ) {
3456
3457
( partialOpts || [
3457
3458
ZERO_PATH ,
3459
+ MINORGRID_PATH ,
3458
3460
GRID_PATH ,
3459
3461
TICK_PATH ,
3460
3462
TICK_TEXT
@@ -3468,6 +3470,7 @@ axes.drawLabels = function(gd, ax, opts) {
3468
3470
3469
3471
var sel ;
3470
3472
if ( e . K === ZERO_PATH . K ) sel = mainPlotinfo . zerolinelayer . selectAll ( '.' + ax . _id + 'zl' ) ;
3473
+ else if ( e . K === MINORGRID_PATH . K ) sel = mainPlotinfo . minorGridlayer . selectAll ( '.' + ax . _id ) ;
3471
3474
else if ( e . K === GRID_PATH . K ) sel = mainPlotinfo . gridlayer . selectAll ( '.' + ax . _id ) ;
3472
3475
else sel = mainPlotinfo [ ax . _id . charAt ( 0 ) + 'axislayer' ] ;
3473
3476
0 commit comments