krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart RegressionChart.java,1.2,1.3
"Nathaniel G. Auvil" <[email protected]> Wed, 27 Oct 2004 20:44:16 +0000
| Newsgroups | gmane.comp.krysalis.jcharts.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10592/src/java/org/krysalis/jcharts/axisChart
Modified Files:
RegressionChart.java
Log Message:
Changed Vector to ArrayList for speed improvement. Still does not work correctly though.
Index: RegressionChart.java
===================================================================
RCS file: /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/RegressionChart.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** RegressionChart.java 13 Aug 2004 01:57:05 -0000 1.2
--- RegressionChart.java 27 Oct 2004 20:44:13 -0000 1.3
***************
*** 38,47 ****
import java.awt.*;
import java.awt.geom.*;
! import java.util.Vector;
! import java.util.Enumeration;
import org.krysalis.jcharts.axisChart.axis.YAxis;
import org.krysalis.jcharts.chartData.interfaces.IAxisChartDataSet;
- import org.krysalis.jcharts.chartData.interfaces.IDataSeries;
import org.krysalis.jcharts.imageMap.CircleMapArea;
import org.krysalis.jcharts.properties.LineChartProperties;
--- 38,45 ----
import java.awt.*;
import java.awt.geom.*;
! import java.util.ArrayList;
import org.krysalis.jcharts.axisChart.axis.YAxis;
import org.krysalis.jcharts.chartData.interfaces.IAxisChartDataSet;
import org.krysalis.jcharts.imageMap.CircleMapArea;
import org.krysalis.jcharts.properties.LineChartProperties;
***************
*** 66,77 ****
double Sxx, Sxy, Syy;
double a, b; //regression coefficients
! Vector v = new Vector(); //vector of points
! Vector residuals = new Vector(); //vector of residuals
- public RegressionChart()
- {
- };
-
private double figureY( YAxis yAxis, double num )
--- 64,71 ----
double Sxx, Sxy, Syy;
double a, b; //regression coefficients
! ArrayList v = new ArrayList(); //vector of points
! ArrayList residuals = new ArrayList(); //vector of residuals
private double figureY( YAxis yAxis, double num )
***************
*** 95,102 ****
lineChartProperties.validate( iAxisChartDataSet );
! //DataAxisProperties dataAxisProperties= (DataAxisProperties)
! // axisChart.getAxisProperties().getYAxisProperties();
! IDataSeries iDataSeries = (IDataSeries) axisChart.getIAxisDataSeries();
!
//---cache the computed values
float[][] yAxisCoordinates = new float[iAxisChartDataSet.getNumberOfDataSets()][iAxisChartDataSet.getNumberOfDataItems()];
--- 89,93 ----
lineChartProperties.validate( iAxisChartDataSet );
!
//---cache the computed values
float[][] yAxisCoordinates = new float[iAxisChartDataSet.getNumberOfDataSets()][iAxisChartDataSet.getNumberOfDataItems()];
***************
*** 113,121 ****
if( iAxisChartDataSet.getValue( i, j ) != Double.NaN )
{
! yAxisCoordinates[i][j] = axisChart.getYAxis().computeAxisCoordinate( axisChart.getYAxis().getOrigin(),
! iAxisChartDataSet.getValue( i, j ),
! axisChart .getYAxis()
! .getScaleCalculator()
! .getMinValue() );
addLoc( new Loc( j, iAxisChartDataSet.getValue( i, j ) ) );
--- 104,110 ----
if( iAxisChartDataSet.getValue( i, j ) != Double.NaN )
{
! yAxisCoordinates[i][j] = axisChart.getYAxis().computeAxisCoordinate( axisChart.getYAxis().getOrigin(),
! iAxisChartDataSet.getValue( i, j ),
! axisChart.getYAxis().getScaleCalculator().getMinValue() );
addLoc( new Loc( j, iAxisChartDataSet.getValue( i, j ) ) );
***************
*** 135,142 ****
axisChart.getImageMap().addImageMapArea( new CircleMapArea( xMapCoordinate,
! yAxisCoordinates[i][j],
! iAxisChartDataSet.getValue( i, j ),
! label,
! iAxisChartDataSet.getLegendLabel( i ) ) );
}
}
--- 124,131 ----
axisChart.getImageMap().addImageMapArea( new CircleMapArea( xMapCoordinate,
! yAxisCoordinates[i][j],
! iAxisChartDataSet.getValue( i, j ),
! label,
! iAxisChartDataSet.getLegendLabel( i ) ) );
}
}
***************
*** 150,156 ****
}
! AffineTransform originalTransform = null;
! double[] cornerXOffset = null;
! double[] cornerYOffset = null;
//---check if there are any points to display
--- 139,145 ----
}
! // AffineTransform originalTransform = null;
! // double[] cornerXOffset = null;
! // double[] cornerYOffset = null;
//---check if there are any points to display
***************
*** 158,281 ****
{
//---when centering the shapes on the points, need x and y offset to do this
! cornerXOffset = new double[iAxisChartDataSet.getNumberOfDataSets()];
! cornerYOffset = new double[iAxisChartDataSet.getNumberOfDataSets()];
//---get the original transform so can reset it.
! originalTransform = g2d.getTransform();
! Rectangle2D rectangle;
//LOOP
- //---pre-compute the dimensions of each Shape so do not do it in loop.
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataSets(); i++ )
{
! if( lineChartProperties.getShapes()[i] != null )
{
! rectangle = lineChartProperties.getShapes()[i].getBounds2D();
! cornerXOffset[i] = rectangle.getWidth() / 2;
! cornerYOffset[i] = rectangle.getHeight() / 2;
! Vector v = regress();
! // y = yoffset + slope(x)
! double yoffset, slope; // round to 5 places
! yoffset = (Math.round( 1.0E5 * a )) * 1.0E-5;
! slope = (Math.round( 1.0E5 * b )) * 1.0E-5;
g2d.setPaint( iAxisChartDataSet.getPaint( i ) );
//g2d.fill( lineChartProperties.getShapes()[ i ] );
g2d.setStroke( lineChartProperties.getLineStrokes()[i] );
! //Line2D.Double line = new Line2D.Double(start.x, start.y, end.x, end.y);
Line2D.Double line = new Line2D.Double( axisChart.getXAxis().getTickStart(),
figureY( axisChart.getYAxis(), (yoffset + slope * 0) ),
axisChart.getXAxis().getTickStart()
! + axisChart.getXAxis().getScalePixelWidth() * (v.size()-1),
figureY( axisChart.getYAxis(), (yoffset + slope * v.size()) ) );
//g2d.fill( line );
g2d.draw( line );
! g2d.setTransform( originalTransform );
}
}
}
-
- //String form = "formula y = "+String.valueOf(yoffset)+" +
- // "+String.valueOf(slope)+"x";
- //g2d.drawString(form , 151, 156);
-
- //---init for first segment
- /*
- * Line2D.Float line=new Line2D.Float( axisChart.getXAxis().getTickStart(),
- * yAxisCoordinates[ 0 ][ 0 ], axisChart.getXAxis().getTickStart(), yAxisCoordinates[
- * 0 ][ 0 ] );
- */
- //---make sure not plotting a chart with only one data point.
- /*
- * if( yAxisCoordinates[ 0 ].length > 1 ) { line.y2= yAxisCoordinates[ 0 ][ 1 ]; }
- */
-
- //LOOP
- //---draw each line to the image
- /*
- * for( int i=0; i < yAxisCoordinates.length; i++ ) {
- * line.x1=axisChart.getXAxis().getTickStart(); line.y1=yAxisCoordinates[ i ][ 0 ];
- * line.x2=line.x1;
- *
- * //LOOP for( int j=1; j < yAxisCoordinates[ 0 ].length; j++ ) { //---if current
- * point on line should be drawn if( !Float.isNaN( yAxisCoordinates[ i ][ j ] ) ) {
- * //---if the previous point was not drawn, no line if( Float.isNaN(
- * yAxisCoordinates[ i ][ j - 1 ] ) ) {
- * line.x2+=axisChart.getXAxis().getScalePixelWidth(); line.x1=line.x2;
- * line.y1=yAxisCoordinates[ i ][ j ]; line.y2=yAxisCoordinates[ i ][ j ];
- *
- * continue; }
- *
- *
- * line.x2+=axisChart.getXAxis().getScalePixelWidth(); line.y2=yAxisCoordinates[ i ][
- * j ];
- *
- * g2d.setPaint( iAxisChartDataSet.getPaint( i ) ); g2d.setStroke(
- * lineChartProperties.getLineStrokes()[ i ] ); g2d.draw( line );
- *
- * //---plot the Point if( lineChartProperties.getShapes()[ i ] != null ) {
- * //---translate the Shape into position. g2d.translate( line.x1 - cornerXOffset[ i ],
- * line.y1 - cornerYOffset[ i ] );
- *
- * g2d.setPaint( iAxisChartDataSet.getPaint( i ) ); g2d.fill(
- * lineChartProperties.getShapes()[ i ] );
- *
- * //---translate back to the original position g2d.setTransform( originalTransform ); }
- *
- * line.x1=line.x2; line.y1=line.y2; } else { if( ( !Float.isNaN( yAxisCoordinates[ i ][
- * j - 1 ] ) ) && ( lineChartProperties.getShapes()[ i ] != null ) ) { //---translate
- * the Shape into position. g2d.translate( line.x1 - cornerXOffset[ i ], line.y1 -
- * cornerYOffset[ i ] );
- *
- * g2d.setPaint( iAxisChartDataSet.getPaint( i ) ); g2d.fill(
- * lineChartProperties.getShapes()[ i ] );
- *
- * //---translate back to the original position g2d.setTransform( originalTransform ); }
- *
- * line.x2+=axisChart.getXAxis().getScalePixelWidth(); line.x1=line.x2; } }
- *
- *
- * //---put the last shape on the line if( ( !Float.isNaN( yAxisCoordinates[ i ][
- * yAxisCoordinates[ i ].length - 1 ] ) ) && ( lineChartProperties.getShapes()[ i ] !=
- * null ) ) { //---translate the Shape into position. g2d.translate( line.x2 -
- * cornerXOffset[ i ], line.y2 - cornerYOffset[ i ] );
- *
- * g2d.setPaint( iAxisChartDataSet.getPaint( i ) ); g2d.fill(
- * lineChartProperties.getShapes()[ i ] );
- *
- * //---translate back to the original position g2d.setTransform( originalTransform ); } }
- */
}
! private Vector regress()
{
! Vector resid = new Vector();
Loc p, q;
double currentResidual;
! double n = (double) numberLocs;
Sxx = sumxx - sumx * sumx / n;
Syy = sumyy - sumy * sumy / n;
--- 147,198 ----
{
//---when centering the shapes on the points, need x and y offset to do this
! // cornerXOffset = new double[iAxisChartDataSet.getNumberOfDataSets()];
! // cornerYOffset = new double[iAxisChartDataSet.getNumberOfDataSets()];
//---get the original transform so can reset it.
! // originalTransform = g2d.getTransform();
! // Rectangle2D rectangle;
//LOOP
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataSets(); i++ )
{
! // if( lineChartProperties.getShapes()[i] != null )
{
! // rectangle = lineChartProperties.getShapes()[i].getBounds2D();
! // cornerXOffset[i] = rectangle.getWidth() / 2;
! // cornerYOffset[i] = rectangle.getHeight() / 2;
! ArrayList v = regress();
!
! // round to 5 places
! double yoffset = (Math.round( 1.0E5 * a )) * 1.0E-5;
! double slope = (Math.round( 1.0E5 * b )) * 1.0E-5;
g2d.setPaint( iAxisChartDataSet.getPaint( i ) );
//g2d.fill( lineChartProperties.getShapes()[ i ] );
g2d.setStroke( lineChartProperties.getLineStrokes()[i] );
!
Line2D.Double line = new Line2D.Double( axisChart.getXAxis().getTickStart(),
figureY( axisChart.getYAxis(), (yoffset + slope * 0) ),
axisChart.getXAxis().getTickStart()
! + axisChart.getXAxis().getScalePixelWidth() * (v.size()-2),
figureY( axisChart.getYAxis(), (yoffset + slope * v.size()) ) );
//g2d.fill( line );
g2d.draw( line );
! // g2d.setTransform( originalTransform );
}
}
}
}
! private ArrayList regress()
{
! ArrayList resid = new ArrayList();
Loc p, q;
double currentResidual;
! double n = numberLocs;
Sxx = sumxx - sumx * sumx / n;
Syy = sumyy - sumy * sumy / n;
***************
*** 283,296 ****
b = Sxy / Sxx;
a = (sumy - b * sumx) / n;
! for( Enumeration e = v.elements(); e.hasMoreElements(); )
{
! p = (Loc) e.nextElement();
currentResidual = p.y - (a + b * p.x);
q = new Loc( p.x, (int) currentResidual );
! resid.addElement( q );
!
}
return resid;
-
}
--- 200,213 ----
b = Sxy / Sxx;
a = (sumy - b * sumx) / n;
!
! for( int i=0; i < v.size(); i++ )
{
! p = (Loc) v.get( i );
currentResidual = p.y - (a + b * p.x);
q = new Loc( p.x, (int) currentResidual );
! resid.add( q );
}
+
return resid;
}
***************
*** 307,311 ****
private void addLoc( Loc p )
{
! v.addElement( p );
numberLocs++;
sumx += p.x;
--- 224,228 ----
private void addLoc( Loc p )
{
! v.add( p );
numberLocs++;
sumx += p.x;
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click