Commit db37719f authored by Masayuki Tanaka's avatar Masayuki Tanaka

Fix padding for data label when rotated axis - #45

parent 908e828b
...@@ -385,8 +385,8 @@ ...@@ -385,8 +385,8 @@
subYMax = __axis_rotated ? width2 : 1; subYMax = __axis_rotated ? width2 : 1;
// update scales // update scales
x = getX(xMin, xMax, x ? x.domain() : undefined, function () { return xAxis.tickOffset(); }); x = getX(xMin, xMax, x ? x.domain() : undefined, function () { return xAxis.tickOffset(); });
y = getY(yMin, yMax, y ? y.domain() : undefined); y = getY(yMin, yMax);
y2 = getY(yMin, yMax, y2 ? y2.domain() : undefined); y2 = getY(yMin, yMax);
subX = getX(xMin, xMax, orgXDomain, function (d) { return d % 1 ? 0 : subXAxis.tickOffset(); }); subX = getX(xMin, xMax, orgXDomain, function (d) { return d % 1 ? 0 : subXAxis.tickOffset(); });
subY = getY(subYMin, subYMax); subY = getY(subYMin, subYMax);
subY2 = getY(subYMin, subYMax); subY2 = getY(subYMin, subYMax);
...@@ -689,7 +689,8 @@ ...@@ -689,7 +689,8 @@
yMax = axisId === 'y2' ? __axis_y2_max : __axis_y_max, yMax = axisId === 'y2' ? __axis_y2_max : __axis_y_max,
yDomainMin = isValue(yMin) ? yMin : getYDomainMin(yTargets), yDomainMin = isValue(yMin) ? yMin : getYDomainMin(yTargets),
yDomainMax = isValue(yMax) ? yMax : getYDomainMax(yTargets), yDomainMax = isValue(yMax) ? yMax : getYDomainMax(yTargets),
padding = Math.abs(yDomainMax - yDomainMin) * (hasDataLabel() && __axis_rotated ? 0.125 : 0.1), domainLength = Math.abs(yDomainMax - yDomainMin),
padding = domainLength * 0.1, // TODO: should be an option
padding_top = padding, padding_bottom = padding, padding_top = padding, padding_bottom = padding,
center = axisId === 'y2' ? __axis_y2_center : __axis_y_center; center = axisId === 'y2' ? __axis_y2_center : __axis_y_center;
if (center) { if (center) {
...@@ -705,6 +706,13 @@ ...@@ -705,6 +706,13 @@
padding_top = isValue(__axis_y2_padding.top) ? __axis_y2_padding.top : padding; padding_top = isValue(__axis_y2_padding.top) ? __axis_y2_padding.top : padding;
padding_bottom = isValue(__axis_y2_padding.bottom) ? __axis_y2_padding.bottom : padding; padding_bottom = isValue(__axis_y2_padding.bottom) ? __axis_y2_padding.bottom : padding;
} }
// add padding for data label
if (hasDataLabel() && __axis_rotated) {
var widths = getDataLabelWidth(yDomainMin, yDomainMax), diff = diffDomain(y.range());
var ratio = [widths[0] / diff, widths[1] / diff];
padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));
padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));
}
// Bar chart with only positive values should be 0-based // Bar chart with only positive values should be 0-based
if (hasBarType(yTargets) && !hasNegativeValueInTargets(yTargets)) { if (hasBarType(yTargets) && !hasNegativeValueInTargets(yTargets)) {
padding_bottom = yDomainMin; padding_bottom = yDomainMin;
...@@ -1019,6 +1027,16 @@ ...@@ -1019,6 +1027,16 @@
} }
return false; return false;
} }
function getDataLabelWidth(min, max) {
var widths = [], paddingCoef = 1.3;
d3.select('svg').selectAll('.dummy')
.data([min, max])
.enter().append('text')
.text(function (d) { return d; })
.each(function (d, i) { var box = this.getBBox(); widths[i] = box.width * paddingCoef; })
.remove();
return widths;
}
function xx(d) { function xx(d) {
return d ? x(d.x) : null; return d ? x(d.x) : null;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment