Multiple dataset graph plotting in same window

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
praneethshub
Posts: 6
Joined: Tue Feb 21, 2017 5:45 pm
antibot: No, of course not.

Multiple dataset graph plotting in same window

Post by praneethshub » Tue Feb 28, 2017 3:09 am

How to generate a graph with multiple datasets in same windows? Below is the output of my current code, which is plotting only "createXYStepDataset()" i need to plot as well "createXYStepDataset2()" in same window. Please guide.

https://drive.google.com/file/d/0B_7Nwa ... sp=sharing

Code: Select all


package my.taskschedule;

import java.awt.BasicStroke;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RefineryUtilities;

/**
 *
 * @author Praneeth
 */
class XYStepChartDemo {
    
private ChartFrame frame = null;

  
    void displayChart() {

        if (this.frame == null) {

            final String title = "Trace";
            final String xAxisLabel = "Tasks";
            final String yAxisLabel = "Amplitude";
            final XYDataset data = createXYStepDataset();
   

            final JFreeChart chart = ChartFactory.createXYStepChart(
                title,
                xAxisLabel, yAxisLabel,
                data,
                PlotOrientation.VERTICAL,
                true,  
                true,  
                false   
            );

            chart.setBackgroundPaint(new Color(216, 216, 216));
            final XYPlot plot = chart.getXYPlot();
            plot.setDomainAxis(new NumberAxis(xAxisLabel));
            plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));
            plot.getRenderer().setSeriesStroke(1, new BasicStroke(2.0f));
            
            this.frame = new ChartFrame("Plan Comparison", chart);
            this.frame.pack();
            RefineryUtilities.positionFrameRandomly(this.frame);
            this.frame.setVisible(true);

        }
        else {
            this.frame.setVisible(true);
            this.frame.requestFocus();
        }

    }

    


public XYDataset createXYStepDataset() {
     final XYSeries series1 = new XYSeries("Series 1");
     series1.add(0, 1);
     series1.add(1, 0);
     series1.add(2, 1);
     series1.add(3, 0);
     series1.add(4, 1);
     series1.add(5, 0);
     series1.add(6, 1);
     series1.add(7, 0);
     series1.add(8, 1);
     final XYSeriesCollection dataset = new XYSeriesCollection();
     dataset.addSeries(series1);
     return dataset;
    }
public XYDataset createXYStepDataset2() {
     final XYSeries series2 = new XYSeries("Series 1");
     series2.add(0, 0);
     series2.add(1, 1);
     series2.add(2, 0);
     series2.add(3, 1);
     series2.add(4, 0);
     series2.add(5, 1);
     series2.add(6, 0);
     series2.add(7, 1);
     series2.add(8, 0);
     final XYSeriesCollection dataset = new XYSeriesCollection();
     dataset.addSeries(series2);
     return dataset;
    }


}

paradoxoff
Posts: 1634
Joined: Sat Feb 17, 2007 1:51 pm

Re: Multiple dataset graph plotting in same window

Post by paradoxoff » Tue Feb 28, 2017 4:54 pm

Add these lines to your displayChart-method before you instantiate the ChartFrame:

Code: Select all

final XYDataset data2 = createXYStepDataset2();
plot.setDataset(1, data2);
plot.setRenderer(1, new XYStepRenderer());
edit: I have just noted that 1) the XYSeriesCollections in your two methods each have only one series and that 2) the value range is very similar.
I would thus suggest to not create a second dataset, but simply create a second series and add that to the one and only dataset. This does not onll require additions but also modifications to your code, something like that:

Code: Select all

    void displayChart() {

        if (this.frame == null) {

            final String title = "Trace";
            final String xAxisLabel = "Tasks";
            final String yAxisLabel = "Amplitude";
            final XYSeriesCollection data = new XYSeriesCollection();
            data.addSeries(createSeriesOne());
            data.addSeries(createSeriesTwo());

            final JFreeChart chart = ChartFactory.createXYStepChart(
                    title,
                    xAxisLabel, yAxisLabel,
                    data,
                    PlotOrientation.VERTICAL,
                    true,
                    true,
                    false
            );

            chart.setBackgroundPaint(new Color(216, 216, 216));
            final XYPlot plot = chart.getXYPlot();
            plot.setDomainAxis(new NumberAxis(xAxisLabel));
            plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));
            plot.getRenderer().setSeriesStroke(1, new BasicStroke(2.0f));

            this.frame = new ChartFrame("Plan Comparison", chart);
            this.frame.pack();
            RefineryUtilities.positionFrameRandomly(this.frame);
            this.frame.setVisible(true);

        } else {
            this.frame.setVisible(true);
            this.frame.requestFocus();
        }

    }

    public XYSeries createSeriesOne() {
        final XYSeries series1 = new XYSeries("Series 1");
        series1.add(0, 1);
        series1.add(1, 0);
        series1.add(2, 1);
        series1.add(3, 0);
        series1.add(4, 1);
        series1.add(5, 0);
        series1.add(6, 1);
        series1.add(7, 0);
        series1.add(8, 1);
        return series;
    }

    public XYDataset createSeriesTwo() {
        final XYSeries series2 = new XYSeries("Series 2");
        series2.add(0, 0);
        series2.add(1, 1);
        series2.add(2, 0);
        series2.add(3, 1);
        series2.add(4, 0);
        series2.add(5, 1);
        series2.add(6, 0);
        series2.add(7, 1);
        series2.add(8, 0);
        return series2;
    }

praneethshub
Posts: 6
Joined: Tue Feb 21, 2017 5:45 pm
antibot: No, of course not.

Re: Multiple dataset graph plotting in same window

Post by praneethshub » Wed Mar 01, 2017 2:22 am

The solution provided works but produces overlapping graph between datasets.

But i need them one below another (subplot) for each dataset i add, how to generate this ?

paradoxoff
Posts: 1634
Joined: Sat Feb 17, 2007 1:51 pm

Re: Multiple dataset graph plotting in same window

Post by paradoxoff » Thu Mar 02, 2017 9:22 am

CombinedDomainXYPlot.

Locked