Skip to content

Commit ad6fe93

Browse files
authored
Merge pull request #6166 from plotly/minor-ticks
Implement options to draw `minor` ticks and grid lines in Cartesian subplots
2 parents b890556 + 69c09c1 commit ad6fe93

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1868
-340
lines changed

src/plots/cartesian/axes.js

+483-184
Large diffs are not rendered by default.

src/plots/cartesian/axis_defaults.js

+30
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var isNumeric = require('fast-isnumeric');
44

55
var Registry = require('../../registry');
66
var Lib = require('../../lib');
7+
var Template = require('../../plot_api/plot_template');
78

89
var handleArrayContainerDefaults = require('../array_container_defaults');
910

@@ -121,16 +122,45 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce,
121122
color: dfltFontColor
122123
});
123124

125+
// major ticks
124126
handleTickValueDefaults(containerIn, containerOut, coerce, axType);
127+
128+
var hasMinor = options.hasMinor;
129+
if(hasMinor) {
130+
// minor ticks
131+
Template.newContainer(containerOut, 'minor');
132+
handleTickValueDefaults(containerIn, containerOut, coerce, axType, { isMinor: true });
133+
}
134+
125135
handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options);
136+
137+
// major and minor ticks
126138
handleTickMarkDefaults(containerIn, containerOut, coerce, options);
139+
if(hasMinor) {
140+
var keepIsMinor = options.isMinor;
141+
options.isMinor = true;
142+
handleTickMarkDefaults(containerIn, containerOut, coerce, options);
143+
options.isMinor = keepIsMinor;
144+
}
145+
127146
handleLineGridDefaults(containerIn, containerOut, coerce, {
128147
dfltColor: dfltColor,
129148
bgColor: options.bgColor,
130149
showGrid: options.showGrid,
150+
hasMinor: hasMinor,
131151
attributes: layoutAttributes
132152
});
133153

154+
// delete minor when no minor ticks or gridlines
155+
if(
156+
hasMinor &&
157+
!containerOut.minor.ticks &&
158+
!containerOut.minor.showgrid
159+
) {
160+
delete containerOut.minor;
161+
}
162+
163+
// mirror
134164
if(containerOut.showline || containerOut.ticks) coerce('mirror');
135165

136166
if(options.automargin) coerce('automargin');

src/plots/cartesian/index.js

+8
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ function makeSubplotLayer(gd, plotinfo) {
461461
plotinfo.shapelayer = ensureSingle(backLayer, 'g', 'shapelayer');
462462
plotinfo.imagelayer = ensureSingle(backLayer, 'g', 'imagelayer');
463463

464+
plotinfo.minorGridlayer = ensureSingle(plotgroup, 'g', 'minor-gridlayer');
464465
plotinfo.gridlayer = ensureSingle(plotgroup, 'g', 'gridlayer');
465466
plotinfo.zerolinelayer = ensureSingle(plotgroup, 'g', 'zerolinelayer');
466467

@@ -500,6 +501,7 @@ function makeSubplotLayer(gd, plotinfo) {
500501
// their other components to the corresponding
501502
// extra groups of their main plots.
502503

504+
plotinfo.minorGridlayer = mainplotinfo.minorGridlayer;
503505
plotinfo.gridlayer = mainplotinfo.gridlayer;
504506
plotinfo.zerolinelayer = mainplotinfo.zerolinelayer;
505507

@@ -525,6 +527,12 @@ function makeSubplotLayer(gd, plotinfo) {
525527
// common attributes for all subplots, overlays or not
526528

527529
if(!hasOnlyLargeSploms) {
530+
ensureSingleAndAddDatum(plotinfo.minorGridlayer, 'g', plotinfo.xaxis._id);
531+
ensureSingleAndAddDatum(plotinfo.minorGridlayer, 'g', plotinfo.yaxis._id);
532+
plotinfo.minorGridlayer.selectAll('g')
533+
.map(function(d) { return d[0]; })
534+
.sort(axisIds.idSort);
535+
528536
ensureSingleAndAddDatum(plotinfo.gridlayer, 'g', plotinfo.xaxis._id);
529537
ensureSingleAndAddDatum(plotinfo.gridlayer, 'g', plotinfo.yaxis._id);
530538
plotinfo.gridlayer.selectAll('g')

0 commit comments

Comments
 (0)