Ref: [ #224318 ] Zero value in auto-range

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
Anthony

Ref: [ #224318 ] Zero value in auto-range

Post by Anthony » Mon Feb 25, 2002 10:33 am

According to the message [ #224318 ] Zero value in auto-range the 2000-12-03 23:11, I propose this modification in the metod autoAdjustRange() of the class HorizontalNumberAxis and VerticalNumberAxis:
Replace:
if (this.autoRangeIncludesZero()) {
if (upper!=0.0) upper = Math.max(0.0, upper+upperMargin*range);
if (lower!=0.0) lower = Math.min(0.0, lower-lowerMargin*range);
}
else {
if (upper!=0.0) upper = upper+upperMargin*range;
if (lower!=0.0) lower = lower-lowerMargin*range;
}

by:

if (this.autoRangeIncludesZero()) {
if (upper!=0.0) upper = Math.max(0.0, upper+upperMargin*range);
if (lower!=0.0) lower = Math.min(0.0, lower-lowerMargin*range);
}
else {
upper = upper+upperMargin*range;
lower = lower-lowerMargin*range;
}

David Gilbert

Re: Ref: [ #224318 ] Zero value in auto-range

Post by David Gilbert » Mon Feb 25, 2002 4:23 pm

Hi Anthony,

Thanks for your post. I took another look at this and decided to create a new flag autoRangeStickyZero so that you can have it either way. Here's the code I have at the moment (not tested, so it could be wrong):

if (this.autoRangeIncludesZero) {
if (this.autoRangeStickyZero) {
if (upper<=0.0) {
upper = Math.max(0.0, Math.min(0.0, upper+upperMargin*range));
}
else {
upper = upper+upperMargin*range;
}
if (lower>=0.0) {
lower = Math.min(0.0, Math.max(0.0, lower-lowerMargin*range));
}
else {
lower = lower-lowerMargin*range;
}
}
else {
upper = Math.max(0.0, upper+upperMargin*range);
lower = Math.min(0.0, lower-lowerMargin*range);
}
}
else {
if (this.autoRangeStickyZero) {
if (upper<=0.0) {
upper = Math.min(0.0, upper+upperMargin*range);
}
else {
upper = upper+upperMargin*range;
}
if (lower>=0.0) {
lower = Math.max(0.0, lower-lowerMargin*range);
}
else {
lower = lower-lowerMargin*range;
}
}
else {
upper = upper+upperMargin*range;
lower = lower-lowerMargin*range;
}
}

Regards,

Dave Gilbert.

Anthony

Re: Ref: [ #224318 ] Zero value in auto-range

Post by Anthony » Thu Feb 28, 2002 11:54 am

Hi David,

Your solution seem to be the good one.
Only one one thing:
Math.max(0.0, Math.min(0.0, upper+upperMargin*range)) and Math.min(0.0, Math.max(0.0, lower-lowerMargin*range)) is egal to zero independently to the value of upper+upperMargin*range and lower-lowerMargin*range.

Regards,

Anthony Boulestreau.

David Gilbert

Re: Ref: [ #224318 ] Zero value in auto-range

Post by David Gilbert » Thu Feb 28, 2002 2:04 pm

Hi Anthony,

Thanks for pointing that out. One of the good things about open source is that silly coding errors get spotted quite quickly!

I think zero is the correct answer in both those cases, so I'll just put "0.0" in there.

Regards,

Dave Gilbert

Locked