|
|
@@ -157,12 +157,17 @@ function graphDirective(timeSrv, popoverSrv, contextSrv) {
|
|
|
|
|
|
function processRangeHook(plot) {
|
|
|
var yaxis = plot.getYAxes();
|
|
|
- if (yaxis.length > 1 && panel.yaxes[1].shareZero) {
|
|
|
- shareYLevel(yaxis[0].min, yaxis[0].max, yaxis[1].min, yaxis[1].max, 0);
|
|
|
+ if (yaxis.length > 1 && panel.yaxes[1].shareLevel) {
|
|
|
+ shareYLevel(yaxis, parseFloat(panel.yaxes[1].shareY || 0));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- function shareYLevel(minLeft, maxLeft, minRight, maxRight, shareLevel) {
|
|
|
+ function shareYLevel(yaxis, shareLevel) {
|
|
|
+ var minLeft = yaxis[0].min;
|
|
|
+ var maxLeft = yaxis[0].max;
|
|
|
+ var minRight = yaxis[1].min;
|
|
|
+ var maxRight = yaxis[1].max;
|
|
|
+
|
|
|
if (shareLevel !== 0) {
|
|
|
minLeft -= shareLevel;
|
|
|
maxLeft -= shareLevel;
|
|
|
@@ -183,76 +188,80 @@ function graphDirective(timeSrv, popoverSrv, contextSrv) {
|
|
|
maxRight += wideFactor;
|
|
|
}
|
|
|
|
|
|
- // on the opposite sides with respect to zero
|
|
|
- if ((minLeft >= 0 && maxRight <= 0) || (maxLeft <= 0 && minRight >= 0)) {
|
|
|
- if (minLeft >= 0) {
|
|
|
- minLeft = -maxLeft;
|
|
|
- maxRight = -minRight;
|
|
|
- } else {
|
|
|
- maxLeft = -minLeft;
|
|
|
- minRight = -maxRight;
|
|
|
- }
|
|
|
+ // one of graphs on zero
|
|
|
+ var zero = minLeft === 0 || minRight === 0 || maxLeft === 0 || maxRight === 0;
|
|
|
+
|
|
|
+ // on the one hand with respect to zero
|
|
|
+ var oneSide = (minLeft >= 0 && minRight >= 0) || (maxLeft <= 0 && maxRight <= 0);
|
|
|
+
|
|
|
+ if (zero && oneSide) {
|
|
|
+ minLeft = maxLeft > 0 ? 0 : minLeft;
|
|
|
+ maxLeft = maxLeft > 0 ? maxLeft : 0;
|
|
|
+ minRight = maxRight > 0 ? 0 : minRight;
|
|
|
+ maxRight = maxRight > 0 ? maxRight : 0;
|
|
|
} else {
|
|
|
- var limitTop = Infinity;
|
|
|
- var limitBottom = -Infinity;
|
|
|
- var absLeftMin = Math.abs(minLeft);
|
|
|
- var absLeftMax = Math.abs(maxLeft);
|
|
|
- var absRightMin = Math.abs(minRight);
|
|
|
- var absRightMax = Math.abs(maxRight);
|
|
|
- var upLeft = _.max([absLeftMin, absLeftMax]);
|
|
|
- var downLeft = _.min([absLeftMin, absLeftMax]);
|
|
|
- var upRight = _.max([absRightMin, absRightMax]);
|
|
|
- var downRight = _.min([absRightMin, absRightMax]);
|
|
|
- var oneSide = (minLeft >= 0 && minRight >= 0) || (maxLeft <= 0 && maxRight <= 0);
|
|
|
- var rateLeft, rateRight, rate;
|
|
|
-
|
|
|
- // on the one hand with respect to zero
|
|
|
- if (oneSide) {
|
|
|
- rateLeft = downLeft ? upLeft / downLeft : downLeft >= 0 ? limitTop : limitBottom;
|
|
|
- rateRight = downRight ? upRight / downRight : downRight >= 0 ? limitTop : limitBottom;
|
|
|
- rate = _.max([rateLeft, rateRight]);
|
|
|
-
|
|
|
- if (rate === limitTop) {
|
|
|
- if (maxLeft > 0) {
|
|
|
- minLeft = 0;
|
|
|
- minRight = 0;
|
|
|
- } else {
|
|
|
- maxLeft = 0;
|
|
|
- maxRight = 0;
|
|
|
- }
|
|
|
+ // on the opposite sides with respect to zero
|
|
|
+ if ((minLeft >= 0 && maxRight <= 0) || (maxLeft <= 0 && minRight >= 0)) {
|
|
|
+ if (minLeft >= 0) {
|
|
|
+ minLeft = -maxLeft;
|
|
|
+ maxRight = -minRight;
|
|
|
+ } else {
|
|
|
+ maxLeft = -minLeft;
|
|
|
+ minRight = -maxRight;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // both across zero
|
|
|
+ var twoCross = minLeft <= 0 && maxLeft >= 0 && minRight <= 0 && maxRight >= 0;
|
|
|
+
|
|
|
+ var rateLeft, rateRight, rate;
|
|
|
+ if (twoCross) {
|
|
|
+ rateLeft = minRight ? minLeft / minRight : 0;
|
|
|
+ rateRight = maxRight ? maxLeft / maxRight : 0;
|
|
|
} else {
|
|
|
- var coef = deltaLeft / deltaRight;
|
|
|
- if ((rate === rateLeft && minLeft > 0) || (rate === rateRight && maxRight < 0)) {
|
|
|
- maxLeft = maxRight * coef;
|
|
|
- minRight = minLeft / coef;
|
|
|
+ if (oneSide) {
|
|
|
+ var absLeftMin = Math.abs(minLeft);
|
|
|
+ var absLeftMax = Math.abs(maxLeft);
|
|
|
+ var absRightMin = Math.abs(minRight);
|
|
|
+ var absRightMax = Math.abs(maxRight);
|
|
|
+ var upLeft = _.max([absLeftMin, absLeftMax]);
|
|
|
+ var downLeft = _.min([absLeftMin, absLeftMax]);
|
|
|
+ var upRight = _.max([absRightMin, absRightMax]);
|
|
|
+ var downRight = _.min([absRightMin, absRightMax]);
|
|
|
+
|
|
|
+ rateLeft = downLeft ? upLeft / downLeft : upLeft;
|
|
|
+ rateRight = downRight ? upRight / downRight : upRight;
|
|
|
} else {
|
|
|
- minLeft = minRight * coef;
|
|
|
- maxRight = maxLeft / coef;
|
|
|
+ if (minLeft > 0 || minRight > 0) {
|
|
|
+ rateLeft = maxLeft / maxRight;
|
|
|
+ rateRight = 0;
|
|
|
+ } else {
|
|
|
+ rateLeft = 0;
|
|
|
+ rateRight = minLeft / minRight;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- rateLeft =
|
|
|
- minLeft && maxLeft
|
|
|
- ? minLeft < 0 ? maxLeft / minLeft : limitBottom
|
|
|
- : minLeft < 0 || maxRight >= 0 ? limitBottom : limitTop;
|
|
|
- rateRight =
|
|
|
- minRight && maxRight
|
|
|
- ? minRight < 0 ? maxRight / minRight : limitBottom
|
|
|
- : minRight < 0 || maxLeft >= 0 ? limitBottom : limitTop;
|
|
|
- rate = _.max([rateLeft, rateRight]);
|
|
|
-
|
|
|
- if (rate === rateLeft) {
|
|
|
- minRight =
|
|
|
- upRight === absRightMin && (absRightMin !== absRightMax || upLeft !== absLeftMin)
|
|
|
- ? -upRight
|
|
|
- : upRight / rate;
|
|
|
- maxRight = upRight === absRightMax ? upRight : -upRight * rate;
|
|
|
+ rate = rateLeft > rateRight ? rateLeft : rateRight;
|
|
|
+
|
|
|
+ if (oneSide) {
|
|
|
+ if (minLeft > 0) {
|
|
|
+ minLeft = maxLeft / rate;
|
|
|
+ minRight = maxRight / rate;
|
|
|
+ } else {
|
|
|
+ maxLeft = minLeft / rate;
|
|
|
+ maxRight = minRight / rate;
|
|
|
+ }
|
|
|
} else {
|
|
|
- minLeft =
|
|
|
- upLeft === absLeftMin && (absLeftMin !== absLeftMax || upRight !== absRightMin)
|
|
|
- ? -upLeft
|
|
|
- : upLeft / rate;
|
|
|
- maxLeft = upLeft === absLeftMax ? upLeft : -upLeft * rate;
|
|
|
+ if (twoCross) {
|
|
|
+ minLeft = minRight ? minRight * rate : minLeft;
|
|
|
+ minRight = minLeft ? minLeft / rate : minRight;
|
|
|
+ maxLeft = maxRight ? maxRight * rate : maxLeft;
|
|
|
+ maxRight = maxLeft ? maxLeft / rate : maxRight;
|
|
|
+ } else {
|
|
|
+ minLeft = minLeft > 0 ? minRight * rate : minLeft;
|
|
|
+ minRight = minRight > 0 ? minLeft / rate : minRight;
|
|
|
+ maxLeft = maxLeft < 0 ? maxRight * rate : maxLeft;
|
|
|
+ maxRight = maxRight < 0 ? maxLeft / rate : maxRight;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -263,6 +272,11 @@ function graphDirective(timeSrv, popoverSrv, contextSrv) {
|
|
|
minRight += shareLevel;
|
|
|
maxRight += shareLevel;
|
|
|
}
|
|
|
+
|
|
|
+ yaxis[0].min = minLeft;
|
|
|
+ yaxis[0].max = maxLeft;
|
|
|
+ yaxis[1].min = minRight;
|
|
|
+ yaxis[1].max = maxRight;
|
|
|
}
|
|
|
|
|
|
// Series could have different timeSteps,
|