Dual Y Axis proposed changes

"Chris McKay" <[email protected]> Tue, 22 Jun 2004 17:39:31 +1200
Newsgroups gmane.comp.krysalis.jcharts.devel,gmane.spam.detected
Message-ID <003801c4581b$4dfb69a0$0300000a@Chris>
Hi all,

Over the weekend I reached the stage where I was about to commit my Dual
Y axis changes into the tree (Would have been sooner apart from a dose
of the flu but it's a wonder what pseudoephedrine and paracetamol will
do for you). 

However I'm coming to the conclusion that further work is required. Let
me outline what is there now, what is damn ugly, and what is required
further and then I'll accept some guidance from the group. (Being a new
boy and all)

Currently in the alpha code is a pretty rudimentary dual axis
implementation where only a line chart can be plotted against the Y
axis.
You manually set the scaling factor between the LHS and RHS, manually
set a min and max RHS value and the RHS is drawn utilising the LHS axis
properties, same font, tick increment etc. However it did the job for us
personally in a tight development squeeze a year or so ago.

Later I came back to it and added in a new right hand AxisTypeProperties
that is stored in AxisProperties, this enabled us to allow the RHS to
have it's own scale calculator, title and label fonts, tick marks etc.

Currently the major methods used to control the axis behaviour can be
seen from the following sample code:

        AxisProperties axisProperties = new AxisProperties(false);
        axisProperties.getYAxisProperties().setShowRightAxis(true);
        axisProperties.getYAxisProperties().setRightYAxisTitle("Success
Percentage");
        AxisTypeProperties rightYAxisProperties =
axisProperties.getRightYAxisProperties();

Then you have all the methods of AxisTypeProperties and
DataAxisProperties to mess with the RHS axis.
 
		((DataAxisProperties)
axisProperties.getRightYAxisProperties()).setNumItems(5);
 		((DataAxisProperties)
axisProperties.getRightYAxisProperties()).setUserDefinedScale(0, 25);
	
axisProperties.getRightYAxisProperties().setTitleChartFont(axisTitleFont
);
	
axisProperties.getRightYAxisProperties().setScaleChartFont(axisScaleFont
);
	
axisProperties.getRightYAxisProperties().setAxisTitleChartFont(axisTitle
Font);
	
axisProperties.getRightYAxisProperties().setPaddingBetweenAxisTitleAndLa
bels(3);
	
axisProperties.getRightYAxisProperties().setTitleChartFont(axisTitleFont
);

Then there is the only tricky bit:

If you don't have a UserDefinedScale you have to define a scale ratio
(this is a hang over from the previous implementation...) The ratio is
the maximum data value from the LHS data divided by the max value from
the RHS.
If you do have a UserDefinedScale then the ratio is the max LHS tick
divided by the max RHS tick.

// using the following line scales the RHS data points by this factor,
max LHS data point / max RHS data point
//
axisProperties.getYAxisProperties().setSecondScaleRight((float)
178/100);
// if you're using UserDefinedScales then the ratio must be the max LHS
tick point/ max RHS tick point
        axisProperties.getYAxisProperties().setSecondScaleRight((float)
200/100);

So there it is. What I want to know is should I commit this now? It
works, is in production at our site etc. and this functionality is in
demand from community members. However there is some ugliness lurking.
Given we are in an Alpha cycle is it appropriate to commit something
knowing it will/should be changed soon?


Ugliness:

setSecondScaleRight:
There is no need to have a method that sets the Scale factor. This
information should be able to be gleaned from the jCharts
ScaleCalculators (mins and maxes).

setRightYAxisTitle:
The RHS Y Axis title is stored in the left AxisTypeProperties, as is the
SecondScaleRight and the ShowRightAxis flag - ugh. It should go in the
AxisDataSeries class perhaps? Maybe the AxisChartDataSet should have a
"plot against the RHS" method so that when it comes to scaling it is
stored with the data to scale.

Deprecation of existing dev code:
With the introduction of these changes a few methods that were
originally in the development tree are now no longer the best way of
doing things (setMinRightAxis for instance). Should I deprecate those
methods or remove them completely?

I await guidence ...

Regards,
Chris




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com