Search in sources :

Example 31 with XYPlot

use of org.jfree.chart.plot.XYPlot in project crypto-bot by jnidzwetzki.

the class Chart method showChart.

public void showChart() {
    /**
     * Building chart datasets
     */
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(buildChartTimeSeries(timeSeries, new ClosePriceIndicator(timeSeries), symbol));
    dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 5), "EMA5"));
    dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 10), "EMA10"));
    dataset.addSeries(buildChartTimeSeries(timeSeries, new EMAIndicator(new ClosePriceIndicator(timeSeries), 40), "EMA40"));
    /**
     * Creating the chart
     */
    JFreeChart chart = // title
    ChartFactory.createTimeSeriesChart(// title
    "BTC", // x-axis label
    "Date", // y-axis label
    "Price", // data
    dataset, // create legend?
    true, // generate tooltips?
    true, // generate URLs?
    false);
    XYPlot plot = (XYPlot) chart.getPlot();
    DateAxis axis = (DateAxis) plot.getDomainAxis();
    axis.setDateFormatOverride(new SimpleDateFormat("MM-dd-yyyy HH:mm"));
    addBuySellSignals(timeSeries, strategy, plot);
    displayChart(chart);
}
Also used : DateAxis(org.jfree.chart.axis.DateAxis) EMAIndicator(org.ta4j.core.indicators.EMAIndicator) XYPlot(org.jfree.chart.plot.XYPlot) TimeSeriesCollection(org.jfree.data.time.TimeSeriesCollection) ClosePriceIndicator(org.ta4j.core.indicators.helpers.ClosePriceIndicator) SimpleDateFormat(java.text.SimpleDateFormat) JFreeChart(org.jfree.chart.JFreeChart)

Example 32 with XYPlot

use of org.jfree.chart.plot.XYPlot in project polyGembler by c-zhou.

the class JfreeChart method plotLineChart.

private void plotLineChart(String file_in, Dimension dim, Color color, String position, String title) {
    JPanel collinearChart = new JPanel();
    collinearChart.setSize(dim);
    collinearChart.setMinimumSize(dim);
    collinearChart.setPreferredSize(dim);
    collinearChart.setBackground(color);
    final XYSeriesCollection lineSeries = new XYSeriesCollection();
    int n1 = 0;
    double x_max = Double.NEGATIVE_INFINITY, y_max = Double.NEGATIVE_INFINITY;
    try {
        BufferedReader br = Utils.getBufferedReader(file_in);
        String line = br.readLine();
        String[] s;
        int series = 0;
        while ((line = br.readLine()) != null && line.length() > 0) {
            s = line.split("\\s+");
            series = Integer.parseInt(s[2]);
            if (lineSeries.getSeriesCount() < series) {
                lineSeries.addSeries(new XYSeries(series));
                n1 = 0;
            }
            double x = Double.parseDouble(s[1]) / 1000, y = Double.parseDouble(s[0]);
            lineSeries.getSeries(series - 1).add(x, y);
            if (x > x_max)
                x_max = x;
            if (y > y_max)
                y_max = y;
            n1++;
        }
        br.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    final int n = n1;
    final int m = lineSeries.getSeriesCount();
    // create error bars
    final XYSeriesCollection errorBarSeries2 = new XYSeriesCollection();
    for (int i = 0; i < n; i++) {
        double[] f = new double[m];
        for (int j = 0; j < m; j++) f[j] = lineSeries.getSeries(j).getY(i).doubleValue();
        double mean = StatUtils.mean(f), sd = Math.sqrt(StatUtils.variance(f));
        double x = lineSeries.getSeries(0).getX(i).doubleValue();
        errorBarSeries2.addSeries(new XYSeries(i));
        errorBarSeries2.getSeries(i).add(x, mean - sd);
        errorBarSeries2.getSeries(i).add(x, mean);
        errorBarSeries2.getSeries(i).add(x, mean + sd);
    }
    final XYSeriesCollection upperBoundSeries = new XYSeriesCollection();
    final XYSeriesCollection upperQ3Series = new XYSeriesCollection();
    final XYSeriesCollection boxSeriesE = new XYSeriesCollection();
    final XYSeriesCollection boxSeriesN = new XYSeriesCollection();
    final XYSeriesCollection boxSeriesW = new XYSeriesCollection();
    final XYSeriesCollection boxSeriesS = new XYSeriesCollection();
    final XYSeriesCollection q2Series = new XYSeriesCollection();
    final XYSeriesCollection lowerQ2Series = new XYSeriesCollection();
    final XYSeriesCollection lowerBoundSeries = new XYSeriesCollection();
    final XYSeriesCollection meanDotSeries = new XYSeriesCollection();
    final XYSeriesCollection fillingSeries = new XYSeriesCollection();
    for (int i = 0; i < n; i++) {
        double[] f = new double[m];
        for (int j = 0; j < m; j++) f[j] = lineSeries.getSeries(j).getY(i).doubleValue();
        double q1 = StatUtils.percentile(f, 25), q2 = StatUtils.percentile(f, 50), q3 = StatUtils.percentile(f, 75);
        double IQR = q3 - q1;
        double[] boundary = new double[] { q1 - 1.5 * IQR, q3 + 1.5 * IQR };
        final Set<Integer> outliers = new HashSet<Integer>();
        for (int k = 0; k < m; k++) if (f[k] < boundary[0] || f[k] > boundary[1])
            outliers.add(k);
        double lower_bound = Double.POSITIVE_INFINITY, upper_bound = Double.NEGATIVE_INFINITY;
        for (int k = 0; k < m; k++) {
            if (outliers.contains(k))
                continue;
            if (f[k] < lower_bound)
                lower_bound = f[k];
            if (f[k] > upper_bound)
                upper_bound = f[k];
        }
        double x = lineSeries.getSeries(0).getX(i).doubleValue();
        double mean = StatUtils.mean(f);
        if (mean >= thres) {
            int w = upperBoundSeries.getSeriesCount();
            upperBoundSeries.addSeries(new XYSeries(i));
            upperBoundSeries.getSeries(w).add(x - half_width, upper_bound);
            upperBoundSeries.getSeries(w).add(x + half_width, upper_bound);
            upperQ3Series.addSeries(new XYSeries(i));
            upperQ3Series.getSeries(w).add(x, upper_bound);
            upperQ3Series.getSeries(w).add(x, q3);
            boxSeriesE.addSeries(new XYSeries(i));
            boxSeriesE.getSeries(w).add(x + half_width, q1);
            boxSeriesE.getSeries(w).add(x + half_width, q3);
            boxSeriesN.addSeries(new XYSeries(i));
            boxSeriesN.getSeries(w).add(x + half_width, q3);
            boxSeriesN.getSeries(w).add(x - half_width, q3);
            boxSeriesW.addSeries(new XYSeries(i));
            boxSeriesW.getSeries(w).add(x - half_width, q3);
            boxSeriesW.getSeries(w).add(x - half_width, q1);
            boxSeriesS.addSeries(new XYSeries(i));
            boxSeriesS.getSeries(w).add(x - half_width, q1);
            boxSeriesS.getSeries(w).add(x + half_width, q1);
            q2Series.addSeries(new XYSeries(i));
            q2Series.getSeries(w).add(x - half_width, q2);
            q2Series.getSeries(w).add(x + half_width, q2);
            lowerQ2Series.addSeries(new XYSeries(i));
            lowerQ2Series.getSeries(w).add(x, q1);
            lowerQ2Series.getSeries(w).add(x, lower_bound);
            lowerBoundSeries.addSeries(new XYSeries(i));
            lowerBoundSeries.getSeries(w).add(x - half_width, lower_bound);
            lowerBoundSeries.getSeries(w).add(x + half_width, lower_bound);
            double x_inter = x - half_width, x_end = x + half_width;
            while (x_inter < x_end) {
                XYSeries tmp = new XYSeries("shading");
                tmp.add(x_inter, q1);
                tmp.add(x_inter, q3);
                fillingSeries.addSeries(tmp);
                x_inter += 0.01;
            }
        }
        meanDotSeries.addSeries(new XYSeries(i));
        meanDotSeries.getSeries(i).add(x, mean);
    }
    final JFreeChart chart = ChartFactory.createXYLineChart(null, // domain axis label
    null, // range axis label
    null, // data
    null, PlotOrientation.VERTICAL, // include legend
    false, // tooltips?
    true, // URL generator? Not required...
    false);
    final NumberAxis domainAxis = new NumberAxis("SNP Physical Position (Kb) [" + n + " SNPs]");
    final NumberAxis rangeAxis = new NumberAxis("Estimated RF");
    domainAxis.setTickUnit(new NumberTickUnit(50));
    domainAxis.setRange(-x_max / 20 / dim.getWidth() * dim.getHeight(), x_max * (1 + 0.1 / dim.getWidth() * dim.getHeight()));
    rangeAxis.setRange(-y_max / 20, y_max * 1.1);
    domainAxis.setLabelFont(font3);
    rangeAxis.setLabelFont(font3);
    domainAxis.setTickLabelFont(font4);
    rangeAxis.setTickLabelFont(font4);
    XYPlot plot = chart.getXYPlot();
    plot.setDomainAxis(domainAxis);
    plot.setRangeAxis(rangeAxis);
    for (int i = 0; i < meanDotSeries.getSeriesCount(); i++) {
        double mean = meanDotSeries.getSeries(i).getY(0).doubleValue();
        if (mean < thres)
            continue;
        double x = meanDotSeries.getSeries(i).getX(0).doubleValue();
        XYTextAnnotation anno = new XYTextAnnotation(String.format(formatStr2, mean) + "\u00B1" + String.format(formatStr2, mean - errorBarSeries2.getSeries(i).getY(0).doubleValue()), x > x_max / 2 ? x - 30 : x + 30, mean);
        anno.setFont(font3);
        plot.addAnnotation((XYAnnotation) anno);
    }
    final ChartPanel cp = new ChartPanel(chart, collinearChart.getWidth(), collinearChart.getHeight(), collinearChart.getWidth(), collinearChart.getHeight(), collinearChart.getWidth(), collinearChart.getHeight(), ChartPanel.DEFAULT_BUFFER_USED, true, true, true, true, true);
    plot.setDataset(0, meanDotSeries);
    plot.setRenderer(0, getRenderer1());
    plot.setDataset(1, upperQ3Series);
    plot.setRenderer(1, getRenderer3());
    plot.setDataset(2, lowerQ2Series);
    plot.setRenderer(2, getRenderer3());
    plot.setDataset(3, boxSeriesE);
    plot.setRenderer(3, getRenderer2());
    plot.setDataset(4, boxSeriesN);
    plot.setRenderer(4, getRenderer2());
    plot.setDataset(5, boxSeriesW);
    plot.setRenderer(5, getRenderer2());
    plot.setDataset(6, boxSeriesS);
    plot.setRenderer(6, getRenderer2());
    plot.setDataset(7, q2Series);
    plot.setRenderer(7, getRenderer2());
    plot.setDataset(8, upperBoundSeries);
    plot.setRenderer(8, getRenderer2());
    plot.setDataset(9, lowerBoundSeries);
    plot.setRenderer(9, getRenderer2());
    plot.setDataset(10, fillingSeries);
    plot.setRenderer(10, getRenderer4());
    plot.setDataset(99, lineSeries);
    plot.setRenderer(99, getRenderer0());
    /**
     *		XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(){
     *			Stroke soild = new BasicStroke(2.0f);
     *			Stroke dashed =  new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, new float[] {10.0f}, 0.0f);
     *			@Override
     *			public Stroke getItemStroke(int row, int column) {
     *				if (row>=N[0]&&row<N[1]){
     *					return new BasicStroke(stroke*2);
     *				}  else if(row>=N[1]&&row<N[2]) {
     *					return new BasicStroke(stroke*2);
     *				} else {
     *					return new BasicStroke(stroke/2);
     *				}
     *			}
     *		};
     *
     *		//XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
     *		for(int i=0; i<seriesCollection.getSeriesCount(); i++) {
     *			if(i>=N[3]) {
     *				renderer.setSeriesPaint(i, Color.gray);
     *			} else if(i>=N[2]) {
     *				renderer.setSeriesPaint(i, Color.decode(hex_str[0]));
     *			} else if(i>=N[1]) {
     *				renderer.setSeriesPaint(i, Color.decode(hex_str[0]));
     *			} else if(i>=N[0]) {
     *				renderer.setSeriesPaint(i, Color.black);
     *			} else {
     *				renderer.setSeriesPaint(i, Color.decode(hex_str[4]));
     *				renderer.setSeriesShapesVisible(i,true);
     *				renderer.setSeriesShapesFilled(i,true);
     *				renderer.setSeriesShape(i, shape);
     *			}
     *
     *		}
     */
    chart.setBackgroundPaint(Color.WHITE);
    chart.setBorderPaint(Color.WHITE);
    chart.setTitle(title);
    cp.setPreferredSize(dim);
    cp.setBorder(null);
    collinearChart.add(cp);
    jframe.add(collinearChart, position);
}
Also used : XYSeries(org.jfree.data.xy.XYSeries) JPanel(javax.swing.JPanel) NumberAxis(org.jfree.chart.axis.NumberAxis) ChartPanel(org.jfree.chart.ChartPanel) IOException(java.io.IOException) JFreeChart(org.jfree.chart.JFreeChart) NumberTickUnit(org.jfree.chart.axis.NumberTickUnit) XYTextAnnotation(org.jfree.chart.annotations.XYTextAnnotation) XYPlot(org.jfree.chart.plot.XYPlot) BufferedReader(java.io.BufferedReader) XYSeriesCollection(org.jfree.data.xy.XYSeriesCollection) HashSet(java.util.HashSet)

Example 33 with XYPlot

use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.

the class frmEditCurve method CreateChartProfile.

/**
 * Creates the chart
 * @param dataset Dataset to display
 * @return Return a JFreeChart object
 */
private JFreeChart CreateChartProfile(XYDataset dataset) {
    JFreeChart chart = ChartFactory.createXYAreaChart("", // "Slope"  x axis label
    bundle.getString("frmEditCurve.chart.slope"), // "speed"  y axis label
    bundle.getString("frmEditCurve.chart.speed") + " (" + Utils.uSpeed2String(settings.Unit, settings.isPace) + ")", // data
    dataset, // include legend
    PlotOrientation.VERTICAL, // include legend
    false, // tooltips
    true, // urls
    false);
    // Panel background color
    chart.setBackgroundPaint(Color.white);
    XYPlot plot = chart.getXYPlot();
    plot.setBackgroundPaint(Color.white);
    plot.setDomainGridlinePaint(Color.gray);
    plot.setRangeGridlinePaint(Color.gray);
    // XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    XYAreaRenderer renderer = new XYAreaRenderer();
    // Green (safe color)
    renderer.setSeriesPaint(0, new Color(0x99, 0xff, 0x00));
    renderer.setOutline(true);
    // Width of the outline
    renderer.setSeriesOutlineStroke(0, new BasicStroke(2.0f));
    plot.setRenderer(renderer);
    return chart;
}
Also used : BasicStroke(java.awt.BasicStroke) XYAreaRenderer(org.jfree.chart.renderer.xy.XYAreaRenderer) XYPlot(org.jfree.chart.plot.XYPlot) Color(java.awt.Color) JFreeChart(org.jfree.chart.JFreeChart)

Example 34 with XYPlot

use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.

the class JPanelAnalysisSpeed method Refresh.

/**
 * Update the Time/Distance chart
 */
public void Refresh(TrackData track, CgSettings settings) {
    if (track == null)
        return;
    if (track.data.isEmpty())
        return;
    this.track = track;
    this.settings = settings;
    // -- Calculate the speed regression
    /*
		 * y = ax + b a = the slope of the trend line. b = the intercept of the
		 * trend line.
		 */
    double xAvg = 0;
    double yAvg = 0;
    double v = 0;
    CgData r;
    for (int x = 0; x < track.data.size(); x++) {
        r = track.data.get(x);
        xAvg += x;
        yAvg += (r.getSpeed(settings.Unit) / (100 / r.getDiff())) / (100 / r.getCoeff());
    }
    xAvg = xAvg / track.data.size();
    yAvg = yAvg / track.data.size();
    double v1 = 0;
    double v2 = 0;
    for (int x = 0; x < track.data.size(); x++) {
        r = track.data.get(x);
        v = (r.getSpeed(settings.Unit) / (100 / r.getDiff())) / (100 / r.getCoeff());
        v1 += (x - xAvg) * (v - yAvg);
        v2 += Math.pow(x - xAvg, 2);
    }
    double a = v1 / v2;
    double b = yAvg - a * xAvg;
    // -- Clear all series
    if (datasetSpeedReg.getSeriesCount() > 0)
        datasetSpeedReg.removeAllSeries();
    if (datasetSpeed.getSeriesCount() > 0)
        datasetSpeed.removeAllSeries();
    XYPlot plot = chart.getXYPlot();
    plot.clearDomainMarkers();
    // -- Populate the serie
    XYSeries serie1 = new XYSeries("Speed regression/Distance");
    XYSeries serie2 = new XYSeries("Speed/Distance");
    startSpeed = 0.0;
    endSpeed = 0.0;
    double maxspeed = 0.0;
    double cmpt = 0.0;
    for (CgData d : track.data) {
        double x = d.getTotal(settings.Unit) / 1000;
        double y = d.getSpeed(settings.Unit);
        if (x < 0.001)
            x = 0;
        if (y > maxspeed)
            maxspeed = y;
        if (cmpt == 0)
            startSpeed = (b / (100 / d.getDiff())) / (100 / d.getCoeff());
        if (cmpt == track.data.size() - 1)
            endSpeed = ((a * x + b) / (100 / d.getDiff())) / (100 / d.getCoeff());
        cmpt++;
        serie1.add(x, y / (100.0 / d.getDiff()) / (100.0 / d.getCoeff()));
        serie2.add(x, a * cmpt + b);
    }
    // -- If there is no speed the exit (not already calculated)
    if (maxspeed == 0.0)
        return;
    datasetSpeedReg.addSeries(serie2);
    datasetSpeed.addSeries(serie1);
    ValueAxis axisY = plot.getRangeAxis(0);
    axisY.setRange(0.0, Math.ceil(maxspeed / 5.0) * 5.0);
    axisY = plot.getRangeAxis(1);
    axisY.setRange(0.0, Math.ceil(maxspeed / 5.0) * 5.0);
    chart = CreateChart(datasetSpeedReg, datasetSpeed);
    RefreshInfo(0);
}
Also used : XYSeries(org.jfree.data.xy.XYSeries) XYPlot(org.jfree.chart.plot.XYPlot) ValueAxis(org.jfree.chart.axis.ValueAxis) CgData(course_generator.CgData)

Example 35 with XYPlot

use of org.jfree.chart.plot.XYPlot in project Course_Generator by patrovite.

the class JPanelAnalysisSpeedSlope method Refresh.

/**
 * Update the Slope/Speed chart
 */
public void Refresh(TrackData track, CgSettings settings) {
    if (track == null)
        return;
    if (track.data.isEmpty())
        return;
    this.track = track;
    this.settings = settings;
    // -- Clear all series
    if (datasetSpeedSlopePoint.getSeriesCount() > 0)
        datasetSpeedSlopePoint.removeAllSeries();
    if (datasetSpeedSlopeLine.getSeriesCount() > 0)
        datasetSpeedSlopeLine.removeAllSeries();
    XYPlot plot = chart.getXYPlot();
    plot.clearDomainMarkers();
    // -- Populate the series
    XYSeries serie1 = new XYSeries("Speed/Slope (points)");
    XYSeries serie2 = new XYSeries("Speed/Slope (line)");
    int[] nb;
    int j = 0;
    double[] fCurveSpeedSlope = new double[101];
    double[] fCurveSpeedSlope2 = new double[101];
    Double[] Average = new Double[101];
    Double[] Variance = new Double[101];
    Double[] StandardDeviation = new Double[101];
    nb = new int[101];
    // -- init calc
    for (j = 0; j < 101; j++) {
        fCurveSpeedSlope[j] = 0;
        fCurveSpeedSlope2[j] = 0;
        nb[j] = 0;
    }
    // -- Execute the speed filtering calculation
    SpeedFilter();
    /*
		 * -- Pass 1 We calculate the average, variance and standard deviation
		 * of each area (1% per area)
		 */
    int n = 0;
    double s = 0.0;
    double coeff = 0.0;
    double diff = 0.0;
    for (CgData r : track.data) {
        if (btSpeedSlopeFilter.isSelected())
            s = r.tmp1;
        else
            s = r.getSpeed(settings.Unit);
        if (btSpeedSlopeCorr.isSelected()) {
            coeff = r.getCoeff() / 100.0;
            diff = r.getDiff() / 100.0;
        } else {
            coeff = 1.00;
            diff = 1.00;
        }
        if (s > 1.5) {
            if (r.getSlope() < -49) {
                fCurveSpeedSlope[0] = fCurveSpeedSlope[0] + (s / coeff / diff);
                fCurveSpeedSlope2[0] = fCurveSpeedSlope2[0] + Math.pow((s / coeff / diff), 2);
                nb[0]++;
            } else if (r.getSlope() > 49) {
                fCurveSpeedSlope[100] = fCurveSpeedSlope[100] + (s / coeff / diff);
                fCurveSpeedSlope2[100] = fCurveSpeedSlope2[100] + Math.pow((s / coeff / diff), 2);
                nb[100]++;
            } else {
                n = (int) Math.floor(r.getSlope());
                fCurveSpeedSlope[n + 50] = fCurveSpeedSlope[n + 50] + (s / coeff / diff);
                fCurveSpeedSlope2[n + 50] = fCurveSpeedSlope2[n + 50] + Math.pow((s / coeff / diff), 2);
                nb[n + 50]++;
            }
        }
    }
    for (j = 0; j < 101; j++) {
        if ((nb[j] > 0)) {
            Average[j] = fCurveSpeedSlope[j] / nb[j];
            Variance[j] = fCurveSpeedSlope2[j] / nb[j] - Average[j] * Average[j];
            StandardDeviation[j] = Math.sqrt(Variance[j]);
        }
    }
    // -- Init calc
    for (j = 0; j < 101; j++) {
        fCurveSpeedSlope[j] = 0;
        fCurveSpeedSlope2[j] = 0;
        nb[j] = 0;
    }
    n = 0;
    s = 0.0;
    coeff = 0.0;
    diff = 0.0;
    for (CgData r : track.data) {
        {
            if (btSpeedSlopeFilter.isSelected())
                s = r.tmp1;
            else
                s = r.getSpeed(settings.Unit);
            if (btSpeedSlopeCorr.isSelected()) {
                coeff = r.getCoeff() / 100.0;
                diff = r.getDiff() / 100.0;
            } else {
                coeff = 1.00;
                diff = 1.00;
            }
            if (s > 1.5) {
                if (r.getSlope() < -49) {
                    if ((s <= Average[0] + StandardDeviation[0]) || (s >= Average[0] - StandardDeviation[0])) {
                        fCurveSpeedSlope[0] = fCurveSpeedSlope[0] + (s / coeff / diff);
                        fCurveSpeedSlope2[0] = fCurveSpeedSlope2[0] + Math.pow((s / coeff / diff), 2);
                        nb[0]++;
                    }
                } else if (r.getSlope() > 49) {
                    if ((s <= Average[100] + StandardDeviation[100]) || (s >= Average[100] - StandardDeviation[100])) {
                        fCurveSpeedSlope[100] = fCurveSpeedSlope[100] + (s / coeff / diff);
                        fCurveSpeedSlope2[100] = fCurveSpeedSlope2[100] + Math.pow((s / coeff / diff), 2);
                        nb[100]++;
                    }
                } else {
                    n = (int) Math.floor(r.getSlope());
                    if ((s <= Average[n + 50] + StandardDeviation[n + 50]) || (s >= Average[n + 50] - StandardDeviation[n + 50])) {
                        fCurveSpeedSlope[n + 50] = fCurveSpeedSlope[n + 50] + (s / coeff / diff);
                        fCurveSpeedSlope2[n + 50] = fCurveSpeedSlope2[n + 50] + Math.pow((s / coeff / diff), 2);
                        nb[n + 50]++;
                    }
                }
            }
        }
    }
    double maxspeed = 0.0;
    // -- Populate the first serie
    for (CgData r : track.data) {
        if (btSpeedSlopeFilter.isSelected())
            s = r.tmp1;
        else
            s = r.getSpeed(settings.Unit);
        if (s > maxspeed)
            maxspeed = s;
        serie1.add(r.getSlope(), s);
    }
    datasetSpeedSlopePoint.addSeries(serie1);
    // -- Populate the second serie
    double m = 0.0;
    for (j = 0; j < 101; j++) {
        if ((nb[j] > 0)) {
            m = fCurveSpeedSlope[j] / nb[j];
            if (m > maxspeed)
                maxspeed = m;
            serie2.add(j - 50, m);
        }
    }
    // -- If there is no speed the exit (not already calculated)
    if (maxspeed == 0)
        return;
    datasetSpeedSlopeLine.addSeries(serie2);
    // -- Set the range of the X axis
    ValueAxis axisX = plot.getDomainAxis();
    axisX.setRange(-50.0, 50.0);
    ValueAxis axisY = plot.getRangeAxis(0);
    axisY.setRange(0, Math.ceil(maxspeed / 5.0) * 5.0);
    axisY = plot.getRangeAxis(1);
    axisY.setRange(1, Math.ceil(maxspeed / 5.0) * 5.0);
}
Also used : XYSeries(org.jfree.data.xy.XYSeries) XYPlot(org.jfree.chart.plot.XYPlot) ValueAxis(org.jfree.chart.axis.ValueAxis) CgData(course_generator.CgData)

Aggregations

XYPlot (org.jfree.chart.plot.XYPlot)160 JFreeChart (org.jfree.chart.JFreeChart)98 NumberAxis (org.jfree.chart.axis.NumberAxis)49 Color (java.awt.Color)43 XYLineAndShapeRenderer (org.jfree.chart.renderer.xy.XYLineAndShapeRenderer)35 ValueAxis (org.jfree.chart.axis.ValueAxis)34 DateAxis (org.jfree.chart.axis.DateAxis)33 XYDataset (org.jfree.data.xy.XYDataset)30 SimpleDateFormat (java.text.SimpleDateFormat)22 XYSeries (org.jfree.data.xy.XYSeries)22 TimeSeriesCollection (org.jfree.data.time.TimeSeriesCollection)21 XYSeriesCollection (org.jfree.data.xy.XYSeriesCollection)21 XYItemRenderer (org.jfree.chart.renderer.xy.XYItemRenderer)18 BasicStroke (java.awt.BasicStroke)16 Font (java.awt.Font)16 ChartPanel (org.jfree.chart.ChartPanel)16 StandardXYToolTipGenerator (org.jfree.chart.labels.StandardXYToolTipGenerator)16 DecimalFormat (java.text.DecimalFormat)13 Map (java.util.Map)13 LegendTitle (org.jfree.chart.title.LegendTitle)13