Skip to content

Commit bd0ce6c

Browse files
committed
Remove axis.tickSubdivide. Fixes d3#1115.
1 parent 23ee2c0 commit bd0ce6c

4 files changed

Lines changed: 64 additions & 161 deletions

File tree

d3.js

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7747,13 +7747,11 @@ d3 = function() {
77477747
}
77487748
}
77497749
d3.svg.axis = function() {
7750-
var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, tickMajorSize = 6, tickMinorSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_, tickSubdivide = 0;
7750+
var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, tickSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;
77517751
function axis(g) {
77527752
g.each(function() {
77537753
var g = d3.select(this);
7754-
var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_;
7755-
var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), subtick = g.selectAll(".tick.minor").data(subticks, String), subtickEnter = subtick.enter().insert("line", ".tick").attr("class", "tick minor").style("opacity", 1e-6), subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), subtickUpdate = d3.transition(subtick).style("opacity", 1);
7756-
var tick = g.selectAll(".tick.major").data(ticks, String), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick major").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
7754+
var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_, tick = g.selectAll(".tick.major").data(ticks, String), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick major").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
77577755
var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
77587756
d3.transition(path));
77597757
var scale1 = scale.copy(), scale0 = this.__chart__ || scale1;
@@ -7765,12 +7763,10 @@ d3 = function() {
77657763
case "bottom":
77667764
{
77677765
tickTransform = d3_svg_axisX;
7768-
subtickEnter.attr("y2", tickMinorSize);
7769-
subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
7770-
lineEnter.attr("y2", tickMajorSize);
7771-
textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding);
7772-
lineUpdate.attr("x2", 0).attr("y2", tickMajorSize);
7773-
textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding);
7766+
lineEnter.attr("y2", tickSize);
7767+
textEnter.attr("y", Math.max(tickSize, 0) + tickPadding);
7768+
lineUpdate.attr("x2", 0).attr("y2", tickSize);
7769+
textUpdate.attr("x", 0).attr("y", Math.max(tickSize, 0) + tickPadding);
77747770
text.attr("dy", ".71em").style("text-anchor", "middle");
77757771
pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
77767772
break;
@@ -7779,12 +7775,10 @@ d3 = function() {
77797775
case "top":
77807776
{
77817777
tickTransform = d3_svg_axisX;
7782-
subtickEnter.attr("y2", -tickMinorSize);
7783-
subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
7784-
lineEnter.attr("y2", -tickMajorSize);
7785-
textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
7786-
lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize);
7787-
textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
7778+
lineEnter.attr("y2", -tickSize);
7779+
textEnter.attr("y", -(Math.max(tickSize, 0) + tickPadding));
7780+
lineUpdate.attr("x2", 0).attr("y2", -tickSize);
7781+
textUpdate.attr("x", 0).attr("y", -(Math.max(tickSize, 0) + tickPadding));
77887782
text.attr("dy", "0em").style("text-anchor", "middle");
77897783
pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
77907784
break;
@@ -7793,12 +7787,10 @@ d3 = function() {
77937787
case "left":
77947788
{
77957789
tickTransform = d3_svg_axisY;
7796-
subtickEnter.attr("x2", -tickMinorSize);
7797-
subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
7798-
lineEnter.attr("x2", -tickMajorSize);
7799-
textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
7800-
lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0);
7801-
textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0);
7790+
lineEnter.attr("x2", -tickSize);
7791+
textEnter.attr("x", -(Math.max(tickSize, 0) + tickPadding));
7792+
lineUpdate.attr("x2", -tickSize).attr("y2", 0);
7793+
textUpdate.attr("x", -(Math.max(tickSize, 0) + tickPadding)).attr("y", 0);
78027794
text.attr("dy", ".32em").style("text-anchor", "end");
78037795
pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
78047796
break;
@@ -7807,12 +7799,10 @@ d3 = function() {
78077799
case "right":
78087800
{
78097801
tickTransform = d3_svg_axisY;
7810-
subtickEnter.attr("x2", tickMinorSize);
7811-
subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
7812-
lineEnter.attr("x2", tickMajorSize);
7813-
textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding);
7814-
lineUpdate.attr("x2", tickMajorSize).attr("y2", 0);
7815-
textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0);
7802+
lineEnter.attr("x2", tickSize);
7803+
textEnter.attr("x", Math.max(tickSize, 0) + tickPadding);
7804+
lineUpdate.attr("x2", tickSize).attr("y2", 0);
7805+
textUpdate.attr("x", Math.max(tickSize, 0) + tickPadding).attr("y", 0);
78167806
text.attr("dy", ".32em").style("text-anchor", "start");
78177807
pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
78187808
break;
@@ -7828,9 +7818,6 @@ d3 = function() {
78287818
tickEnter.call(tickTransform, scale0);
78297819
tickUpdate.call(tickTransform, scale1);
78307820
tickExit.call(tickTransform, scale1);
7831-
subtickEnter.call(tickTransform, scale0);
7832-
subtickUpdate.call(tickTransform, scale1);
7833-
subtickExit.call(tickTransform, scale1);
78347821
}
78357822
});
78367823
}
@@ -7859,23 +7846,20 @@ d3 = function() {
78597846
tickFormat_ = x;
78607847
return axis;
78617848
};
7862-
axis.tickSize = function(x, y) {
7863-
if (!arguments.length) return tickMajorSize;
7864-
var n = arguments.length - 1;
7865-
tickMajorSize = +x;
7866-
tickMinorSize = n > 1 ? +y : tickMajorSize;
7867-
tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
7849+
axis.tickSize = function(x) {
7850+
var n = arguments.length;
7851+
if (!n) return tickSize;
7852+
tickSize = +x;
7853+
tickEndSize = +arguments[n - 1];
78687854
return axis;
78697855
};
78707856
axis.tickPadding = function(x) {
78717857
if (!arguments.length) return tickPadding;
78727858
tickPadding = +x;
78737859
return axis;
78747860
};
7875-
axis.tickSubdivide = function(x) {
7876-
if (!arguments.length) return tickSubdivide;
7877-
tickSubdivide = +x;
7878-
return axis;
7861+
axis.tickSubdivide = function() {
7862+
return arguments.length && axis;
78797863
};
78807864
return axis;
78817865
};
@@ -7895,23 +7879,6 @@ d3 = function() {
78957879
return "translate(0," + y(d) + ")";
78967880
});
78977881
}
7898-
function d3_svg_axisSubdivide(scale, ticks, m) {
7899-
subticks = [];
7900-
if (m && ticks.length > 1) {
7901-
var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v;
7902-
while (++i < n) {
7903-
for (j = m; --j > 0; ) {
7904-
if ((v = +ticks[i] - j * d) >= extent[0]) {
7905-
subticks.push(v);
7906-
}
7907-
}
7908-
}
7909-
for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) {
7910-
subticks.push(v);
7911-
}
7912-
}
7913-
return subticks;
7914-
}
79157882
d3.svg.brush = function() {
79167883
var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, resizes = d3_svg_brushResizes[0], extent = [ [ 0, 0 ], [ 0, 0 ] ], clamp = [ true, true ], extentDomain;
79177884
function brush(g) {

d3.min.js

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/svg/axis.js

Lines changed: 27 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,21 @@ import "svg";
77
d3.svg.axis = function() {
88
var scale = d3.scale.linear(),
99
orient = d3_svg_axisDefaultOrient,
10-
tickMajorSize = 6,
11-
tickMinorSize = 6,
10+
tickSize = 6,
1211
tickEndSize = 6,
1312
tickPadding = 3,
1413
tickArguments_ = [10],
1514
tickValues = null,
16-
tickFormat_,
17-
tickSubdivide = 0;
15+
tickFormat_;
1816

1917
function axis(g) {
2018
g.each(function() {
2119
var g = d3.select(this);
2220

2321
// Ticks, or domain values for ordinal scales.
2422
var ticks = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain()) : tickValues,
25-
tickFormat = tickFormat_ == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String) : tickFormat_;
26-
27-
// Minor ticks.
28-
var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
29-
subtick = g.selectAll(".tick.minor").data(subticks, String),
30-
subtickEnter = subtick.enter().insert("line", ".tick").attr("class", "tick minor").style("opacity", 1e-6),
31-
subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(),
32-
subtickUpdate = d3.transition(subtick).style("opacity", 1);
33-
34-
// Major ticks.
35-
var tick = g.selectAll(".tick.major").data(ticks, String),
23+
tickFormat = tickFormat_ == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String) : tickFormat_,
24+
tick = g.selectAll(".tick.major").data(ticks, String),
3625
tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick major").style("opacity", 1e-6),
3726
tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(),
3827
tickUpdate = d3.transition(tick).style("opacity", 1),
@@ -60,48 +49,40 @@ d3.svg.axis = function() {
6049
switch (orient) {
6150
case "bottom": {
6251
tickTransform = d3_svg_axisX;
63-
subtickEnter.attr("y2", tickMinorSize);
64-
subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
65-
lineEnter.attr("y2", tickMajorSize);
66-
textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding);
67-
lineUpdate.attr("x2", 0).attr("y2", tickMajorSize);
68-
textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding);
52+
lineEnter.attr("y2", tickSize);
53+
textEnter.attr("y", Math.max(tickSize, 0) + tickPadding);
54+
lineUpdate.attr("x2", 0).attr("y2", tickSize);
55+
textUpdate.attr("x", 0).attr("y", Math.max(tickSize, 0) + tickPadding);
6956
text.attr("dy", ".71em").style("text-anchor", "middle");
7057
pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
7158
break;
7259
}
7360
case "top": {
7461
tickTransform = d3_svg_axisX;
75-
subtickEnter.attr("y2", -tickMinorSize);
76-
subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
77-
lineEnter.attr("y2", -tickMajorSize);
78-
textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
79-
lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize);
80-
textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
62+
lineEnter.attr("y2", -tickSize);
63+
textEnter.attr("y", -(Math.max(tickSize, 0) + tickPadding));
64+
lineUpdate.attr("x2", 0).attr("y2", -tickSize);
65+
textUpdate.attr("x", 0).attr("y", -(Math.max(tickSize, 0) + tickPadding));
8166
text.attr("dy", "0em").style("text-anchor", "middle");
8267
pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
8368
break;
8469
}
8570
case "left": {
8671
tickTransform = d3_svg_axisY;
87-
subtickEnter.attr("x2", -tickMinorSize);
88-
subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
89-
lineEnter.attr("x2", -tickMajorSize);
90-
textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
91-
lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0);
92-
textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0);
72+
lineEnter.attr("x2", -tickSize);
73+
textEnter.attr("x", -(Math.max(tickSize, 0) + tickPadding));
74+
lineUpdate.attr("x2", -tickSize).attr("y2", 0);
75+
textUpdate.attr("x", -(Math.max(tickSize, 0) + tickPadding)).attr("y", 0);
9376
text.attr("dy", ".32em").style("text-anchor", "end");
9477
pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
9578
break;
9679
}
9780
case "right": {
9881
tickTransform = d3_svg_axisY;
99-
subtickEnter.attr("x2", tickMinorSize);
100-
subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
101-
lineEnter.attr("x2", tickMajorSize);
102-
textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding);
103-
lineUpdate.attr("x2", tickMajorSize).attr("y2", 0);
104-
textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0);
82+
lineEnter.attr("x2", tickSize);
83+
textEnter.attr("x", Math.max(tickSize, 0) + tickPadding);
84+
lineUpdate.attr("x2", tickSize).attr("y2", 0);
85+
textUpdate.attr("x", Math.max(tickSize, 0) + tickPadding).attr("y", 0);
10586
text.attr("dy", ".32em").style("text-anchor", "start");
10687
pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
10788
break;
@@ -125,9 +106,6 @@ d3.svg.axis = function() {
125106
tickEnter.call(tickTransform, scale0);
126107
tickUpdate.call(tickTransform, scale1);
127108
tickExit.call(tickTransform, scale1);
128-
subtickEnter.call(tickTransform, scale0);
129-
subtickUpdate.call(tickTransform, scale1);
130-
subtickExit.call(tickTransform, scale1);
131109
}
132110
});
133111
}
@@ -162,12 +140,11 @@ d3.svg.axis = function() {
162140
return axis;
163141
};
164142

165-
axis.tickSize = function(x, y) {
166-
if (!arguments.length) return tickMajorSize;
167-
var n = arguments.length - 1;
168-
tickMajorSize = +x;
169-
tickMinorSize = n > 1 ? +y : tickMajorSize;
170-
tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
143+
axis.tickSize = function(x) {
144+
var n = arguments.length;
145+
if (!n) return tickSize;
146+
tickSize = +x;
147+
tickEndSize = +arguments[n - 1];
171148
return axis;
172149
};
173150

@@ -177,10 +154,8 @@ d3.svg.axis = function() {
177154
return axis;
178155
};
179156

180-
axis.tickSubdivide = function(x) {
181-
if (!arguments.length) return tickSubdivide;
182-
tickSubdivide = +x;
183-
return axis;
157+
axis.tickSubdivide = function() {
158+
return arguments.length && axis;
184159
};
185160

186161
return axis;
@@ -196,27 +171,3 @@ function d3_svg_axisX(selection, x) {
196171
function d3_svg_axisY(selection, y) {
197172
selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
198173
}
199-
200-
function d3_svg_axisSubdivide(scale, ticks, m) {
201-
subticks = [];
202-
if (m && ticks.length > 1) {
203-
var extent = d3_scaleExtent(scale.domain()),
204-
subticks,
205-
i = -1,
206-
n = ticks.length,
207-
d = (ticks[1] - ticks[0]) / ++m,
208-
j,
209-
v;
210-
while (++i < n) {
211-
for (j = m; --j > 0;) {
212-
if ((v = +ticks[i] - j * d) >= extent[0]) {
213-
subticks.push(v);
214-
}
215-
}
216-
}
217-
for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
218-
subticks.push(v);
219-
}
220-
}
221-
return subticks;
222-
}

test/svg/axis-test.js

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,11 @@ suite.addBatch({
195195
path = g.selectAll("path");
196196
assert.equal(path.attr("d"), "M0,3V0H1V3");
197197
},
198-
"with three arguments, specifies end and minor tick sizes": function(d3) {
199-
var a = d3.svg.axis().tickSubdivide(3).tickSize(6, 3, 9),
200-
g = d3.select("body").html("").append("g").call(a),
201-
path = g.selectAll("path"),
202-
line = g.select(".minor");
198+
"with three arguments, specifies end tick size and ignores minor tick size": function(d3) {
199+
var a = d3.svg.axis().tickSize(6, 3, 9),
200+
g = d3.select("body").html("").append("svg:g").call(a),
201+
path = g.selectAll("path");
203202
assert.equal(path.attr("d"), "M0,9V0H1V9");
204-
assert.equal(line.attr("y2"), "3");
205203
}
206204
},
207205

@@ -324,24 +322,11 @@ suite.addBatch({
324322
},
325323

326324
"tickSubdivide": {
327-
"defaults to zero": function(d3) {
325+
"is deprecated and does nothing": function(d3) {
328326
var a = d3.svg.axis();
329327
assert.equal(a.tickSubdivide(), 0);
330-
},
331-
"coerces input value to a number": function(d3) {
332-
var a = d3.svg.axis().tickSubdivide(true);
333-
assert.strictEqual(a.tickSubdivide(), 1);
334-
},
335-
"does not generate minor ticks when zero": function(d3) {
336-
var g = d3.select("body").html("").append("g").call(d3.svg.axis());
337-
assert.isTrue(g.selectAll(".minor").empty());
338-
},
339-
"affects the generated minor ticks": function(d3) {
340-
var a = d3.svg.axis().tickSubdivide(3),
341-
g = d3.select("body").html("").append("g").call(a),
342-
t = g.selectAll("line.tick.minor");
343-
assert.equal(t[0].length, 30);
344-
assert.equal(t[0][1].getAttribute("transform"), "translate(0.05,0)");
328+
assert.strictEqual(a.tickSubdivide(1), a);
329+
assert.equal(a.tickSubdivide(), 0);
345330
}
346331
},
347332

0 commit comments

Comments
 (0)