From: Nathaniel G. A. <nat...@us...> - 2004-10-27 20:44:25
|
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; |