@@ -36,6 +36,7 @@ var BADNUM = constants.BADNUM;
3636
3737var ZERO_PATH = { K : 'zeroline' } ;
3838var GRID_PATH = { K : 'gridline' , L : 'path' } ;
39+ var MINORGRID_PATH = { K : 'minor-gridline' , L : 'path' } ;
3940var TICK_PATH = { K : 'tick' , L : 'path' } ;
4041var TICK_TEXT = { K : 'tick' , L : 'text' } ;
4142
@@ -2196,6 +2197,7 @@ axes.draw = function(gd, arg, opts) {
21962197 plotinfo . xaxislayer . selectAll ( '.' + xa . _id + 'divider' ) . remove ( ) ;
21972198 plotinfo . yaxislayer . selectAll ( '.' + ya . _id + 'divider' ) . remove ( ) ;
21982199
2200+ if ( plotinfo . minorGridlayer ) plotinfo . minorGridlayer . selectAll ( 'path' ) . remove ( ) ;
21992201 if ( plotinfo . gridlayer ) plotinfo . gridlayer . selectAll ( 'path' ) . remove ( ) ;
22002202 if ( plotinfo . zerolinelayer ) plotinfo . zerolinelayer . selectAll ( 'path' ) . remove ( ) ;
22012203
@@ -2349,6 +2351,7 @@ axes.drawOne = function(gd, ax, opts) {
23492351 vals : gridVals ,
23502352 counterAxis : counterAxis ,
23512353 layer : plotinfo . gridlayer . select ( '.' + axId ) ,
2354+ minorLayer : plotinfo . minorGridlayer . select ( '.' + axId ) ,
23522355 path : gridPath ,
23532356 transFn : transTickFn
23542357 } ) ;
@@ -3124,26 +3127,16 @@ axes.drawGrid = function(gd, ax, opts) {
31243127 var cls = ax . _id + 'grid' ;
31253128
31263129 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 ; } ) : [ ] ;
31393132
31403133 var counterAx = opts . counterAxis ;
31413134 if ( counterAx && axes . shouldShowZeroLine ( gd , ax , counterAx ) ) {
31423135 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 ;
31453138 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 ) ) ;
31473140 // In array mode you can in principle have multiple
31483141 // ticks at 0, so test them all. Otherwise once we found
31493142 // one we can stop.
@@ -3153,42 +3146,50 @@ axes.drawGrid = function(gd, ax, opts) {
31533146 }
31543147 }
31553148
3156- var grid = opts . layer . selectAll ( 'path.' + cls )
3157- . data ( vals , tickDataFn ) ;
3149+ ax . _gw =
3150+ Drawing . crispRound ( gd , ax . gridwidth , 1 ) ;
31583151
3159- grid . exit ( ) . remove ( ) ;
3152+ var wMinor = ! hasMinor ? 0 :
3153+ Drawing . crispRound ( gd , ax . minor . gridwidth , 1 ) ;
31603154
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 ;
31643160
3165- ax . _gw = Drawing . crispRound ( gd , ax . gridwidth , 1 ) ;
3161+ var grid = layer . selectAll ( 'path.' + cls )
3162+ . data ( major ? majorVals : minorVals , tickDataFn ) ;
31663163
3167- var wMinor ;
3168- if ( hasMinor ) wMinor = Drawing . crispRound ( gd , ax . minor . gridwidth , 1 ) ;
3164+ grid . exit ( ) . remove ( ) ;
31693165
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
31883188
3189- hideCounterAxisInsideTickLabels ( ax , [ GRID_PATH ] ) ;
3189+ if ( typeof opts . path === 'function' ) grid . attr ( 'd' , opts . path ) ;
3190+ }
31903191
3191- if ( typeof opts . path === 'function' ) grid . attr ( 'd' , opts . path ) ;
3192+ hideCounterAxisInsideTickLabels ( ax , [ GRID_PATH , MINORGRID_PATH ] ) ;
31923193} ;
31933194
31943195/**
@@ -3455,6 +3456,7 @@ axes.drawLabels = function(gd, ax, opts) {
34553456 if ( anchorAx && insideTicklabelposition ( anchorAx ) ) {
34563457 ( partialOpts || [
34573458 ZERO_PATH ,
3459+ MINORGRID_PATH ,
34583460 GRID_PATH ,
34593461 TICK_PATH ,
34603462 TICK_TEXT
@@ -3468,6 +3470,7 @@ axes.drawLabels = function(gd, ax, opts) {
34683470
34693471 var sel ;
34703472 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 ) ;
34713474 else if ( e . K === GRID_PATH . K ) sel = mainPlotinfo . gridlayer . selectAll ( '.' + ax . _id ) ;
34723475 else sel = mainPlotinfo [ ax . _id . charAt ( 0 ) + 'axislayer' ] ;
34733476
0 commit comments