Example usage for org.jfree.data.time TimeSeriesCollection addSeries

List of usage examples for org.jfree.data.time TimeSeriesCollection addSeries

Introduction

In this page you can find the example usage for org.jfree.data.time TimeSeriesCollection addSeries.

Prototype

public void addSeries(TimeSeries series) 

Source Link

Document

Adds a series to the collection and sends a DatasetChangeEvent to all registered listeners.

Usage

From source file:org.jfree.chart.demo.MarkerDemo2.java

private static XYDataset createDataset() {
    TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
    TimeSeries timeseries = new TimeSeries("Temperature");
    timeseries.add(new Hour(0, 30, 6, 2005), 45.299999999999997D);
    timeseries.add(new Hour(1, 30, 6, 2005), 48.899999999999999D);
    timeseries.add(new Hour(2, 30, 6, 2005), 52.100000000000001D);
    timeseries.add(new Hour(3, 30, 6, 2005), 44.799999999999997D);
    timeseries.add(new Hour(4, 30, 6, 2005), 49.899999999999999D);
    timeseries.add(new Hour(5, 30, 6, 2005), 55.5D);
    timeseries.add(new Hour(6, 30, 6, 2005), 58.200000000000003D);
    timeseries.add(new Hour(7, 30, 6, 2005), 58.100000000000001D);
    timeseries.add(new Hour(8, 30, 6, 2005), 63.700000000000003D);
    timeseries.add(new Hour(9, 30, 6, 2005), 66.299999999999997D);
    timeseries.add(new Hour(10, 30, 6, 2005), 69.799999999999997D);
    timeseries.add(new Hour(11, 30, 6, 2005), 70.099999999999994D);
    timeseries.add(new Hour(12, 30, 6, 2005), 72.400000000000006D);
    timeseries.add(new Hour(13, 30, 6, 2005), 69.700000000000003D);
    timeseries.add(new Hour(14, 30, 6, 2005), 68.599999999999994D);
    timeseries.add(new Hour(15, 30, 6, 2005), 70.900000000000006D);
    timeseries.add(new Hour(16, 30, 6, 2005), 73.400000000000006D);
    timeseries.add(new Hour(17, 30, 6, 2005), 77.5D);
    timeseries.add(new Hour(18, 30, 6, 2005), 82.900000000000006D);
    timeseries.add(new Hour(19, 30, 6, 2005), 62.100000000000001D);
    timeseries.add(new Hour(20, 30, 6, 2005), 37.299999999999997D);
    timeseries.add(new Hour(21, 30, 6, 2005), 40.700000000000003D);
    timeseries.add(new Hour(22, 30, 6, 2005), 44.200000000000003D);
    timeseries.add(new Hour(23, 30, 6, 2005), 49.799999999999997D);
    timeseriescollection.addSeries(timeseries);
    return timeseriescollection;
}

From source file:virgil.meanback.HistoryInfo.java

public XYDataset getDataSet(Stock stock, List<String[]> list) throws Exception {
    TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
    TimeSeries time1 = new TimeSeries("MD20");
    TimeSeries time2 = new TimeSeries("K");
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    for (int i = 0; i < list.size(); i++) {
        String[] s = (String[]) list.get(i);
        Date d = format.parse(s[0]);
        Calendar cc = Calendar.getInstance();
        cc.setTime(d);// w ww  .  ja  v a2  s .  c  o m
        double db = Double.parseDouble(stock.getList().get(i).getClose());
        Day day = new Day(d);
        time1.addOrUpdate(day, db);
        double dayclose = Double.parseDouble(stock.getList().get(i).getClose());
        time2.addOrUpdate(day, dayclose);
    }
    timeseriescollection.addSeries(time1);
    timeseriescollection.addSeries(time2);
    return timeseriescollection;
}

From source file:org.jfree.data.time.TimeSeriesCollectionTest.java

/**
 * Some checks for the getRangeBounds() method.
 *//*ww  w.  j  a  v  a  2 s  .  c  o  m*/
@Test
public void testGetRangeBounds() {
    TimeSeriesCollection dataset = new TimeSeriesCollection();

    // when the dataset contains no series, we expect the range to be null
    assertNull(dataset.getRangeBounds(false));
    assertNull(dataset.getRangeBounds(true));

    // when the dataset contains one or more series, but those series
    // contain no items, we still expect the range to be null
    TimeSeries s1 = new TimeSeries("S1");
    dataset.addSeries(s1);
    assertNull(dataset.getRangeBounds(false));
    assertNull(dataset.getRangeBounds(true));

    // tests with values
    s1.add(new Year(2012), 1.0);
    assertEquals(new Range(1.0, 1.0), dataset.getRangeBounds(false));
    assertEquals(new Range(1.0, 1.0), dataset.getRangeBounds(true));
    s1.add(new Year(2013), -1.0);
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(false));
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(true));
    s1.add(new Year(2014), null);
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(false));
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(true));

    // adding a second series
    TimeSeries s2 = new TimeSeries("S2");
    dataset.addSeries(s2);
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(false));
    assertEquals(new Range(-1.0, 1.0), dataset.getRangeBounds(true));

    s2.add(new Year(2014), 5.0);
    assertEquals(new Range(-1.0, 5.0), dataset.getRangeBounds(false));
    assertEquals(new Range(-1.0, 5.0), dataset.getRangeBounds(true));

    dataset.removeAllSeries();
    assertNull(dataset.getRangeBounds(false));
    assertNull(dataset.getRangeBounds(true));

    s1 = new TimeSeries("s1");
    s2 = new TimeSeries("s2");
    dataset.addSeries(s1);
    dataset.addSeries(s2);
    assertNull(dataset.getRangeBounds(false));
    assertNull(dataset.getRangeBounds(true));

    s2.add(new Year(2014), 100.0);
    assertEquals(new Range(100.0, 100.0), dataset.getRangeBounds(false));
    assertEquals(new Range(100.0, 100.0), dataset.getRangeBounds(true));
}

From source file:gov.llnl.lc.infiniband.opensm.plugin.gui.chart.SimpleXY_ChartPanel.java

private XYDataset createDeltaDataset(OSM_FabricDeltaCollection deltaHistory, Object userElement,
        String seriesName) {//  w w w  . j a  v  a  2 s.c  o  m
    //      PortCounterName portCounter = null;
    //      MAD_Counter madCounter = null;
    //      OsmEvent osmEvent = null;
    //      
    //      if((Port != null) && (userElement instanceof PortCounterName))
    //        portCounter = (PortCounterName)userElement;
    //
    //      if((MAD_Stats != null) && (userElement instanceof MAD_Counter))
    //        madCounter = (MAD_Counter)userElement;
    //
    //      if((EventStats != null) && (userElement instanceof OsmEvent))
    //        osmEvent = (OsmEvent)userElement;
    //      
    TimeSeries series = new TimeSeries(seriesName);

    // iterate through the collection, and build up a time series
    for (int j = 0; j < deltaHistory.getSize(); j++) {
        OSM_FabricDelta delta = deltaHistory.getOSM_FabricDelta(j);

        // the dataset is a timeseries collection
        long lValue = 0;
        TimeStamp ts = null;
        RegularTimePeriod ms = null;

        if (Port != null) {
            // find the desired port counter, in this instance
            LinkedHashMap<String, PFM_PortChange> pcL = delta.getPortChanges();
            PFM_PortChange pC = pcL.get(OSM_Port.getOSM_PortKey(Port));
            lValue = pC.getDelta_port_counter(PortCounter);
            ts = pC.getCounterTimeStamp();

            // correct for missing time periods
            int deltaSeconds = delta.getDeltaSeconds();
            long sweepPeriod = delta.getFabric2().getPerfMgrSweepSecs();
            if (sweepPeriod < deltaSeconds) {
                // graph is reported as counts per period, so if the period is too long, interpolate
                lValue *= sweepPeriod;
                lValue /= deltaSeconds;
            }
        } else if (MADCounter != null) {
            // find the desired MAD counter, in this instance
            OSM_Stats mStats = delta.getStatChanges();
            lValue = MADCounter.getCounterValue(mStats);
            ts = delta.getTimeStamp();

            // correct for missing time periods
            int deltaSeconds = delta.getDeltaSeconds();
            long sweepPeriod = delta.getFabric2().getPerfMgrSweepSecs();
            if (sweepPeriod < deltaSeconds) {
                // graph is reported as counts per period, so if the period is too long, interpolate
                lValue *= sweepPeriod;
                lValue /= deltaSeconds;
            }
        } else if (EventType != null) {
            // find the desired Event counter, in this instance
            OSM_EventStats eStats = delta.getEventChanges();
            lValue = eStats.getCounter(EventType);
            ts = delta.getTimeStamp();

            // correct for missing time periods
            int deltaSeconds = delta.getDeltaSeconds();
            long sweepPeriod = delta.getFabric2().getPerfMgrSweepSecs();
            if (sweepPeriod < deltaSeconds) {
                // graph is reported as counts per period, so if the period is too long, interpolate
                lValue *= sweepPeriod;
                lValue /= deltaSeconds;
            }
        } else
            continue;

        ms = new FixedMillisecond(ts.getTimeInMillis());
        series.add(ms, (double) lValue);
    }
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(series);

    return dataset;
}

From source file:DataCharts.Chart.java

/**
 * Creates a dataset, consisting customers per area code
 * Methods are for display purposes at this point and may be refactored and 
 * modified based on necessity//from   w  w  w . ja  v a2 s  .  c  om
 */
private XYDataset createXYDataset(ArrayList<YearData> locs) {

    try {
        ResultSet locations = db.selectDataColumn("customer", "*");
        TimeSeriesCollection dataset = new TimeSeriesCollection();

        Calendar defCal = Calendar.getInstance();
        defCal.set(2015, 1, 1);
        int defMonthNum = defCal.get(Calendar.MONTH);
        TimeSeries defTime = new TimeSeries("" + defCal.get(Calendar.MONTH));
        Month defMonth = new Month(defMonthNum, 2015);
        defTime.addOrUpdate(defMonth, 0);

        defCal = Calendar.getInstance();
        defCal.set(2015, 6, 6);
        defMonthNum = defCal.get(Calendar.MONTH);
        defTime = new TimeSeries("" + defCal.get(Calendar.MONTH));
        defMonth = new Month(defMonthNum, 2015);
        defTime.addOrUpdate(defMonth, 0);

        dataset.addSeries(defTime);
        while (locations.next()) {

            ResultSet jobDates = db.selectDataColumn("jobs", "date", locations.getString(2), "CustomerID");
            TimeSeries time = new TimeSeries("" + locations.getInt(7));
            int n = 0;
            Month month = null;
            while (jobDates.next()) {
                if (n == 0) {
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(jobDates.getDate(1));
                    int monthNum = cal.get(Calendar.MONTH);
                    month = new Month(monthNum, 2015);
                }
                n++;

            }
            if (month != null) {
                time.addOrUpdate(month, n);
                dataset.addSeries(time);
            }
        }
        return dataset;
    } catch (SQLException ex) {
        Logger.getLogger(Chart.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}

From source file:msec.org.Tools.java

private static XYDataset createDaysDataset(ArrayList<OneDayValue> oneDayValues, GregorianCalendar startgc,
        OneAttrDaysChart chart) {//w  w w.j a  va 2 s.co  m
    TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
    TimeSeries timeseries = new TimeSeries(
            oneDayValues.get(0).getDate() + "-" + oneDayValues.get(oneDayValues.size() - 1).getDate());
    int sum = 0;
    int max = 0;
    int min = 0;
    Minute current = new Minute(startgc.getTime());
    for (int j = 0; j < oneDayValues.size(); j++) {
        int[] data = oneDayValues.get(j).getValues();
        //check actual length for data
        int len = data.length - 1;
        if (j == oneDayValues.size() - 1) {
            //if last day is today...
            if (oneDayValues.get(j).getDate().equals(Tools.nowString("yyyyMMdd"))) {
                for (int i = len; i >= 0; i--) {
                    if (data[i] != 0) {
                        len = i;
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < len; ++i) {
            timeseries.add(current, (double) (data[i]));
            sum += data[i];
            max = Math.max(max, data[i]);
            if (min == 0)
                min = data[i];
            else if (data[i] != 0)
                min = Math.min(min, data[i]);
            current = (Minute) current.next();
        }
    }
    chart.setMax(max);
    chart.setMin(min);
    chart.setSum(sum);
    timeseriescollection.addSeries(timeseries);
    return timeseriescollection;
}

From source file:org.jfree.chart.demo.DifferenceChartDemo2.java

/**
 * Creates a new demo.//  w w w  . j  av  a  2  s.  c  om
 *
 * @param title  the frame title.
 */
public DifferenceChartDemo2(final String title) {

    super(title);

    final TimeSeries series1 = createSunriseSeries();
    final TimeSeries series2 = createSunsetSeries();
    final TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(series1);
    dataset.addSeries(series2);

    final JFreeChart chart = createChart(dataset);

    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    setContentPane(chartPanel);

}

From source file:net.atomique.ksar.graph.Graph.java

private XYDataset create_collection(ArrayList l) {
    TimeSeriesCollection graphcollection = new TimeSeriesCollection();
    TimeSeries found;//w ww . j  av  a  2  s .  c o  m
    boolean hasdata = false;
    for (int i = 0; i < l.size(); i++) {
        found = null;
        for (int j = 0; j < Stats.size(); j++) {
            found = Stats.get(j);
            if (found.getKey().equals(l.get(i))) {
                break;
            } else {
                found = null;
            }
        }

        if (found != null) {
            graphcollection.addSeries(found);
            hasdata = true;
        }
    }
    if (!hasdata) {
        return null;
    }
    return graphcollection;
}

From source file:com.prezerak.windmill.gui.AveragesPanel.java

private void plotEverything() {
    try {/*from   w  w  w.j  av a2  s.c o m*/
        final XYPlot plot = chart.getXYPlot();

        ValueAxis domainAxis = plot.getDomainAxis();
        plot.getDomainAxis().setLowerMargin(0);
        plot.getDomainAxis().setUpperMargin(0);
        plot.getDomainAxis().setAutoRange(true);

        if (domainAxis instanceof DateAxis) {
            DateAxis axis = (DateAxis) domainAxis;
            // customise axis here...
            //axis.setRange(new Date(startDate), new Date(endDate));
            long startT = datasetVel.getDataItem(0).getPeriod().getLastMillisecond();
            long endT = datasetVel.getDataItem(datasetVel.getItemCount() - 1).getPeriod().getLastMillisecond();
            ;
            DateFormat formatter;
            long duration = endT - startT;
            long _24hrs = 1000 * 60 * 60 * 24;
            long _3mins = 1000 * 60 * 3;

            if (duration > _24hrs) {
                formatter = new SimpleDateFormat("HH:mm dd-MMM");
            } else if (endDate - startDate > _3mins && endDate - startDate <= _24hrs)
                formatter = new SimpleDateFormat("HH:mm");
            else //smaller than 3mins
                formatter = new SimpleDateFormat("HH:mm:ss");
            axis.setDateFormatOverride(formatter);
        }

        TimeSeriesCollection seriesVel = new TimeSeriesCollection();
        seriesVel.addSeries(datasetVel);
        plot.setDataset(0, seriesVel);
        final NumberAxis velRangeAxis = (NumberAxis) plot.getRangeAxis();
        velRangeAxis.setRange(0.0, maxY);
        plot.setRangeAxis(velRangeAxis);
        plot.mapDatasetToRangeAxis(0, 0);
        XYLineAndShapeRenderer velocityRenderer = (XYLineAndShapeRenderer) plot.getRenderer(0);
        velocityRenderer.setBaseShapesVisible(true);
        velocityRenderer.setBaseShapesFilled(false);
        velocityRenderer.setBaseToolTipGenerator(
                new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                        new SimpleDateFormat("dd-MM-yy, hh:mm:ss a"), new DecimalFormat("00.0")));
        velocityRenderer.setSeriesPaint(0, Color.BLACK);

        if (!rdbtnVelocity.isSelected()) {
            velocityRenderer.setSeriesVisible(0, false);
        } else {
            velocityRenderer.setSeriesVisible(0, true);
        }

        TimeSeriesCollection seriesDir = new TimeSeriesCollection();
        seriesDir.addSeries(datasetDir);
        plot.setDataset(1, seriesDir);
        final ValueAxis dirRangeAxis = new NumberAxis("Direction");
        dirRangeAxis.setRange(0.0, 370.0);
        plot.setRangeAxis(1, dirRangeAxis);
        plot.mapDatasetToRangeAxis(1, 1);

        XYLineAndShapeRenderer dirRenderer = (XYLineAndShapeRenderer) plot.getRenderer(1);
        if (dirRenderer == null)
            dirRenderer = new XYLineAndShapeRenderer();
        dirRenderer.setBaseToolTipGenerator(
                new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                        new SimpleDateFormat("dd-MM-yy, hh:mm:ss a"), new DecimalFormat("00.0")));

        plot.setRenderer(1, dirRenderer);
        dirRenderer.setSeriesPaint(0, Color.BLUE);

        if (!rdbtnDirection.isSelected()) {
            dirRenderer.setSeriesVisible(0, false);
        } else {
            dirRenderer.setSeriesVisible(0, true);
        }

        final ValueAxis alarmsRangeAxis = new NumberAxis("Alarms");
        alarmsRangeAxis.setRange(0.0, 1);
        alarmsRangeAxis.setVisible(false);

        XYBarRenderer gustRenderer = null;

        TimePeriodValuesCollection seriesGust = new TimePeriodValuesCollection(datasetGust);
        plot.setDataset(2, seriesGust);

        plot.setRangeAxis(2, alarmsRangeAxis);
        plot.mapDatasetToRangeAxis(2, 2);

        gustRenderer = (XYBarRenderer) plot.getRenderer(2);
        if (gustRenderer == null)
            gustRenderer = new XYBarRenderer();
        plot.setRenderer(2, gustRenderer);
        gustRenderer.setSeriesPaint(0, Color.PINK);

        if ((rdbtnVelocity.isSelected() || rdbtnDirection.isSelected()) && rdbtnGust.isSelected())
            gustRenderer.setSeriesVisible(0, true);
        else
            gustRenderer.setSeriesVisible(0, false);

        XYBarRenderer higherRenderer = null;
        TimePeriodValuesCollection seriesHigher = new TimePeriodValuesCollection(datasetHigher);
        plot.setDataset(3, seriesHigher);

        plot.setRangeAxis(3, alarmsRangeAxis);
        plot.mapDatasetToRangeAxis(3, 2);

        higherRenderer = (XYBarRenderer) plot.getRenderer(3);
        if (higherRenderer == null)
            higherRenderer = new XYBarRenderer();
        plot.setRenderer(3, higherRenderer);
        higherRenderer.setSeriesPaint(0, Color.RED);
        if ((rdbtnVelocity.isSelected() || rdbtnDirection.isSelected()) && rdbtnHigher.isSelected())

            higherRenderer.setSeriesVisible(0, true);

        else
            higherRenderer.setSeriesVisible(0, false);

        TimePeriodValuesCollection seriesHigh = new TimePeriodValuesCollection(datasetHigh);
        plot.setDataset(4, seriesHigh);

        plot.setRangeAxis(4, alarmsRangeAxis);
        plot.mapDatasetToRangeAxis(4, 2);

        XYBarRenderer highRenderer = (XYBarRenderer) plot.getRenderer(4);
        if (highRenderer == null)
            highRenderer = new XYBarRenderer();
        plot.setRenderer(4, highRenderer);
        highRenderer.setSeriesPaint(0, new Color(206, 33, 85));
        if ((rdbtnVelocity.isSelected() || rdbtnDirection.isSelected()) && rdbtnHigh.isSelected())

            highRenderer.setSeriesVisible(0, true);
        else
            highRenderer.setSeriesVisible(0, false);

    } catch (OutOfMemoryError e) {
        WindMill.logger.warn("Out of Memory in plotEverything");
    }

}

From source file:ecg.ecgshow.ECGShowUI.java

private void createECGData(long timeZone) {
    ECGData = new JPanel(new GridLayout(LEAD_COUNT, 1));
    dateAxises = new DateAxis[LEAD_COUNT];
    ECGSeries = new TimeSeries[LEAD_COUNT * 2];
    for (int i = 0; i < LEAD_COUNT; i++) {
        TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); //XYDataset  TimeSeriesCollection
        ECGSeries[i] = new TimeSeries("?" + (i + 1));
        ECGSeries[i].setMaximumItemCount(500);
        ECGSeries[i + LEAD_COUNT] = new TimeSeries("");
        ECGSeries[i + LEAD_COUNT].setMaximumItemAge(timeZone);
        ECGSeries[i + LEAD_COUNT].setMaximumItemCount(2);

        timeseriescollection.addSeries(ECGSeries[i]);
        timeseriescollection.addSeries(ECGSeries[i + LEAD_COUNT]);

        //DateAxis dateaxis = new DateAxis("Time");
        dateAxises[i] = new DateAxis("");
        dateAxises[i].setTickLabelFont(new Font("SansSerif", 0, (int) (HEIGHT * 0.016)));
        dateAxises[i].setLabelFont(new Font("SansSerif", 0, (int) (HEIGHT * 0.018)));
        dateAxises[i].setTickLabelsVisible(true);
        dateAxises[i].setVisible(false);

        //NumberAxis numberaxis = new NumberAxis("ecg");
        NumberAxis numberaxis = new NumberAxis("ecg");
        numberaxis.setTickLabelFont(new Font("SansSerif", 0, (int) (HEIGHT * 0.016)));
        numberaxis.setLabelFont(new Font("SansSerif", 0, (int) (HEIGHT * 0.018)));
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        numberaxis.setVisible(false);/*from w ww.java  2  s .  c  om*/
        numberaxis.setLowerBound(1500D);
        numberaxis.setUpperBound(3000D);

        XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer(true, false);
        xylineandshaperenderer.setSeriesPaint(0, Color.GREEN); //
        xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(2));
        xylineandshaperenderer.setSeriesPaint(1, Color.LIGHT_GRAY); //
        xylineandshaperenderer.setSeriesStroke(1, new BasicStroke(5));

        XYPlot xyplot = new XYPlot(timeseriescollection, dateAxises[i], numberaxis, xylineandshaperenderer);
        xyplot.setBackgroundPaint(Color.LIGHT_GRAY);
        xyplot.setDomainGridlinePaint(Color.LIGHT_GRAY);
        xyplot.setRangeGridlinePaint(Color.LIGHT_GRAY);
        xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
        xyplot.setBackgroundPaint(Color.BLACK);

        JFreeChart jfreechart = new JFreeChart(xyplot);
        jfreechart.setBackgroundPaint(new Color(237, 237, 237));//?
        jfreechart.getLegend().setVisible(false);

        ChartPanel chartpanel = new ChartPanel(jfreechart, (int) (WIDTH * 46 / 100), (int) (HEIGHT * 17 / 100),
                0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, false, true, false, false);

        chartpanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0) //??0
                , BorderFactory.createEmptyBorder() //????
        ));
        chartpanel.setMouseZoomable(false); //?
        ECGData.add(chartpanel);
    }
}