Example usage for org.jfree.data.xy XYDataset getY

List of usage examples for org.jfree.data.xy XYDataset getY

Introduction

In this page you can find the example usage for org.jfree.data.xy XYDataset getY.

Prototype

public Number getY(int series, int item);

Source Link

Document

Returns the y-value for an item within a series.

Usage

From source file:net.sourceforge.processdash.ev.ui.chart.RangeXYItemRenderer.java

/** Draws the visual representation of a single data item.
 *//*from  w w  w .ja v a  2  s . c o m*/
@Override
public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info,
        XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item,
        CrosshairState crosshairInfo, int pass) {

    // setup for collecting optional entity info...
    EntityCollection entities = null;
    if (info != null) {
        entities = info.getOwner().getEntityCollection();
    }
    Shape entityArea = null;

    Paint paint = getItemPaint(series, item);
    Stroke seriesStroke = getItemStroke(series, item);
    g2.setPaint(paint);
    g2.setStroke(seriesStroke);

    // get the data point...
    Number x1n = dataset.getX(series, item);
    Number y1n = dataset.getY(series, item);
    if (y1n == null || x1n == null) {
        return;
    }

    double x1 = x1n.doubleValue();
    double y1 = y1n.doubleValue();
    final RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
    final RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
    double transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
    double transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);
    PlotOrientation orientation = plot.getOrientation();

    if (item > 0) {
        // get the previous data point...
        Number x0n = dataset.getX(series, item - 1);
        Number y0n = dataset.getY(series, item - 1);
        if (y0n != null && x0n != null) {
            double x0 = x0n.doubleValue();
            double y0 = y0n.doubleValue();

            double transX0 = domainAxis.valueToJava2D(x0, dataArea, xAxisLocation);
            double transY0 = rangeAxis.valueToJava2D(y0, dataArea, yAxisLocation);

            // only draw if we have good values
            if (Double.isNaN(transX0) || Double.isNaN(transY0) || Double.isNaN(transX1)
                    || Double.isNaN(transY1)) {
                return;
            }

            if (orientation == PlotOrientation.HORIZONTAL) {
                line.setLine(transY0, transX0, transY1, transX1);
            } else if (orientation == PlotOrientation.VERTICAL) {
                line.setLine(transX0, transY0, transX1, transY1);
            }

            if (y1n instanceof RangeInfo) {
                RangeInfo y1r = (RangeInfo) y1n;
                double transY1low = rangeAxis.valueToJava2D(y1r.getRangeLowerBound(false), dataArea,
                        yAxisLocation);
                double transY1high = rangeAxis.valueToJava2D(y1r.getRangeUpperBound(false), dataArea,
                        yAxisLocation);
                drawItemRangeGradient(g2, line, paint, seriesStroke, transX1, transY1low, transX1, transY1high);

            } else if (x1n instanceof RangeInfo) {
                RangeInfo x1r = (RangeInfo) x1n;
                double transX1low = domainAxis.valueToJava2D(x1r.getRangeLowerBound(false), dataArea,
                        xAxisLocation);
                double transX1high = domainAxis.valueToJava2D(x1r.getRangeUpperBound(false), dataArea,
                        xAxisLocation);
                drawItemRangeGradient(g2, line, paint, seriesStroke, transX1low, transY1, transX1high, transY1);

            } else if (line.intersects(dataArea)) {
                g2.draw(line);
            }
        }
    } else if (dataset.getItemCount(series) == 1) {
        Shape shape = getItemShape(series, item);
        if (orientation == PlotOrientation.HORIZONTAL) {
            shape = ShapeUtilities.createTranslatedShape(shape, transY1, transX1);
        } else if (orientation == PlotOrientation.VERTICAL) {
            shape = ShapeUtilities.createTranslatedShape(shape, transX1, transY1);
        }
        if (shape.intersects(dataArea)) {
            if (getItemShapeFilled(series, item)) {
                g2.fill(shape);
            } else {
                g2.draw(shape);
            }
        }
        entityArea = shape;
    }

    if (entities != null && (dataArea.contains(transX1, transY1) || entityArea != null)) {
        addEntity(entities, entityArea, dataset, series, item, transX1, transY1);
    }

}

From source file:com.igalia.java.zk.components.JFreeChartEngine.java

/**
 * decode XYItemEntity into key-value pair of Area's componentScope.
 *///  w w  w  .  j a  v a2 s.c om
private void decodeXYInfo(Area area, XYItemEntity info, Chart chart) {
    if (info == null) {
        return;
    }
    TimeZone tz = chart.getTimeZone();
    if (tz == null)
        tz = TimeZones.getCurrent();

    XYDataset dataset = info.getDataset();
    int si = info.getSeriesIndex();
    int ii = info.getItem();

    area.setAttribute("series", dataset.getSeriesKey(si));

    if (dataset instanceof XYZDataset) {
        XYZDataset ds = (XYZDataset) dataset;
        area.setAttribute("x", ds.getX(si, ii));
        area.setAttribute("y", ds.getY(si, ii));
        area.setAttribute("z", ds.getZ(si, ii));
    } else {
        area.setAttribute("x", dataset.getX(si, ii));
        area.setAttribute("y", dataset.getY(si, ii));
    }

}

From source file:org.fhcrc.cpl.toolbox.gui.chart.PanelWithChart.java

protected void saveChartDataToFile(File outFile, String delimiter) {
    _log.debug("saveChartDataToFile1, *delimiter*=*" + delimiter + "*");
    XYPlot xyPlot = (XYPlot) _plot;/*from  www.  j  a  v a2  s  .c  o  m*/
    XYDataset dataset = xyPlot.getDataset();

    boolean hasZValues = false;
    if (dataset instanceof XYZDataset)
        hasZValues = true;

    PrintWriter pw = null;

    try {
        pw = new PrintWriter(outFile);
        int seriesCount = dataset.getSeriesCount();
        String headerLine = null;

        if (seriesCount > 1)
            headerLine = "series" + delimiter + "x" + delimiter + "y";
        else
            headerLine = "x" + delimiter + "y";
        if (hasZValues)
            headerLine = headerLine + delimiter + "z";

        pw.println(headerLine);

        for (int i = 0; i < seriesCount; i++) {
            int itemCount = dataset.getItemCount(i);
            for (int j = 0; j < itemCount; j++) {
                String fileLine = null;
                if (seriesCount > 1)
                    fileLine = i + delimiter + dataset.getX(i, j) + delimiter + dataset.getY(i, j);
                else
                    fileLine = dataset.getX(i, j) + delimiter + dataset.getY(i, j);

                if (hasZValues)
                    fileLine = fileLine + delimiter + ((XYZDataset) dataset).getZ(i, j);
                pw.println(fileLine);
            }
            pw.flush();
        }
    } catch (Exception e) {
        ApplicationContext.errorMessage(TextProvider.getText("ERROR_SAVING_CHART_DATA"), e);
    } finally {
        if (pw != null)
            pw.close();
    }
}

From source file:net.sf.maltcms.chromaui.charts.Chromatogram1DChartProvider.java

/**
 *
 * @param dataset//from  w  ww  . j  av a  2  s  .  c  om
 * @param tooltipGenerator
 * @param minRange
 * @param maxRange
 * @param useRT
 * @return
 */
public XYPlot provide1DCoPlot(XYZDataset dataset, SelectionAwareXYTooltipGenerator tooltipGenerator,
        double minRange, double maxRange, boolean useRT) {
    XYBlockRenderer xyb = new XYBlockRenderer();
    GradientPaintScale ps = new GradientPaintScale(ImageTools.createSampleTable(256), minRange, maxRange,
            ImageTools.rampToColorArray(new ColorRampReader().readColorRamp("res/colorRamps/bcgyr.csv")));

    xyb.setPaintScale(ps);
    final String[] colnames = new String[dataset.getSeriesCount()];
    for (int i = 0; i < dataset.getSeriesCount(); i++) {
        colnames[i] = "" + dataset.getSeriesKey(i);//StringTools.removeFileExt(fragments.get(i).getName());
    }
    NumberAxis na = null;
    if (useRT) {
        na = new NumberAxis("time [s]");
        na.setAutoRangeIncludesZero(false);
        na.setLowerMargin(0);
        na.setUpperMargin(0);
    } else {
        na = new NumberAxis("scan index");
    }
    // na.setVerticalTickLabels(true);
    XYPlot xyp = new XYPlot(dataset, na, new SymbolAxis("chromatogram", colnames), xyb);
    //xyb.setBlockWidth(1);
    xyp.setBackgroundPaint(ps.getPaint(ps.getLowerBound()));
    tooltipGenerator.setXYToolTipGenerator(new XYZToolTipGenerator() {
        @Override
        public String generateToolTip(XYZDataset xyzd, int i, int i1) {
            return colnames[xyzd.getY(i, i1).intValue()] + " @" + xyzd.getXValue(i, i1) + " = "
                    + xyzd.getZValue(i, i1);
        }

        @Override
        public String generateToolTip(XYDataset xyd, int i, int i1) {
            if (xyd instanceof XYZDataset) {
                return generateToolTip((XYZDataset) xyd, i, i1);
            }
            return colnames[xyd.getY(i, i1).intValue()] + ":" + xyd.getXValue(i, i1);
        }
    });
    xyb.setBaseToolTipGenerator(tooltipGenerator);
    return xyp;
}

From source file:net.sf.maltcms.chromaui.charts.Chromatogram1DChartProvider.java

/**
 *
 * @param fragments//  w  ww  .  j  av a2s . co  m
 * @param ticvar
 * @param useRT
 * @return
 */
public XYPlot provide1DCoPlot(List<IFileFragment> fragments, String ticvar, boolean useRT) {

    final String satVar = "scan_acquisition_time";

    DefaultXYZDataset cd = new DefaultXYZDataset();
    int rowIdx = 0;
    double min = 0;
    double max = 1;
    double minRT = Double.POSITIVE_INFINITY;
    double maxRT = Double.NEGATIVE_INFINITY;

    int y = 0;
    for (IFileFragment f : fragments) {

        double[] domainValues = null;
        if (useRT) {
            domainValues = (double[]) f.getChild(satVar).getArray().get1DJavaArray(double.class);
        } else {
            domainValues = (double[]) f.getChild("scan_index").getArray().get1DJavaArray(double.class);
        }

        double[] tic = (double[]) f.getChild(ticvar).getArray().get1DJavaArray(double.class);
        double maxtic = MathTools.max(tic);
        double mintic = MathTools.min(tic);
        double[][] values = new double[3][tic.length];
        for (int i = 0; i < tic.length; i++) {
            values[0][i] = domainValues[i];
            values[1][i] = y;
            values[2][i] = Math.sqrt((tic[i] - mintic) / (maxtic - mintic));
        }

        y++;
        cd.addSeries(f.getName(), values);
    }

    // ArrayDouble.D1 a = new ArrayDouble.D1(npoints);
    // int offset = 0;
    // for (IFileFragment f : t) {
    // Array tic = f.getChild(ticvar).getArray();
    // int len = tic.getShape()[0];
    // Array.arraycopy(tic, 0, a, offset, len);
    // offset += len;
    // }
    // histogram with fixed binsize
    // fill intensities into adequate bin, raise count in bin by one
    // afterwards, relative frequency within a bin gives a normalization
    // coefficient
    XYBlockRenderer xyb = new XYBlockRenderer();
    GradientPaintScale ps = new GradientPaintScale(ImageTools.createSampleTable(256), min, max,
            ImageTools.rampToColorArray(new ColorRampReader().readColorRamp("res/colorRamps/bcgyr.csv")));

    xyb.setPaintScale(ps);
    final String[] colnames = new String[fragments.size()];
    for (int i = 0; i < colnames.length; i++) {
        colnames[i] = StringTools.removeFileExt(fragments.get(i).getName());
    }
    NumberAxis na = null;
    if (useRT) {
        na = new NumberAxis("time [s]");
        na.setAutoRangeIncludesZero(false);
        na.setLowerMargin(0);
        na.setUpperMargin(0);
    } else {
        na = new NumberAxis("scan index");
    }
    // na.setVerticalTickLabels(true);
    XYPlot xyp = new XYPlot(cd, na, new SymbolAxis("chromatogram", colnames), xyb);
    xyb.setBlockWidth(1);
    xyp.setBackgroundPaint(Color.BLACK);
    xyb.setBaseToolTipGenerator(new XYZToolTipGenerator() {
        @Override
        public String generateToolTip(XYZDataset xyzd, int i, int i1) {
            return colnames[xyzd.getY(i, i1).intValue()] + " @" + xyzd.getXValue(i, i1) + " = "
                    + xyzd.getZValue(i, i1);
        }

        @Override
        public String generateToolTip(XYDataset xyd, int i, int i1) {
            if (xyd instanceof XYZDataset) {
                return generateToolTip((XYZDataset) xyd, i, i1);
            }
            return colnames[xyd.getY(i, i1).intValue()] + ":" + xyd.getXValue(i, i1);
        }
    });
    return xyp;
}

From source file:com.intel.stl.ui.main.view.DataRateChartRangeUpdater.java

@Override
public void updateChartRange(JFreeChart chart, long lower, long upper) {
    if (lower > upper) {
        return;//from www. j a  v  a  2s. c om
    }

    XYPlot xyplot = (XYPlot) chart.getPlot();
    NumberAxis range = (NumberAxis) xyplot.getRangeAxis();
    range.setRangeWithMargins(lower, upper);
    range.setLowerBound(0);

    // If upper is less than 1000, don't do anything to convert the y-axis
    // label and
    // convert the unit tick.
    TickUnitSource unitSrc = createTickUnits(upper);
    if (unitSrc != null) {
        // Change tick values only if upper is above 1000.
        range.setStandardTickUnits(unitSrc);

        xyplot.getRenderer().setBaseToolTipGenerator(
                new StandardXYToolTipGenerator("<html><b>{0}</b><br> Time: {1}<br> Data: {2}</html>",
                        Util.getHHMMSS(), new DecimalFormat("#,##0.00" + " " + unitDes)) {

                    private static final long serialVersionUID = 4825888117284967486L;

                    @Override
                    protected Object[] createItemArray(XYDataset dataset, int series, int item) {

                        String nullXString = "null";
                        String nullYString = "null";

                        Object[] result = new Object[3];
                        result[0] = dataset.getSeriesKey(series).toString();

                        double x = dataset.getXValue(series, item);
                        if (Double.isNaN(x) && dataset.getX(series, item) == null) {
                            result[1] = nullXString;
                        } else {
                            DateFormat xDateFormat = this.getXDateFormat();
                            if (xDateFormat != null) {
                                result[1] = xDateFormat.format(new Date((long) x));
                            } else {

                                result[1] = this.getXFormat().format(x);
                            }
                        }

                        double y = dataset.getYValue(series, item);
                        if (Double.isNaN(y) && dataset.getY(series, item) == null) {
                            result[2] = nullYString;
                        } else {
                            DateFormat yDateFormat = this.getYDateFormat();
                            if (yDateFormat != null) {
                                result[2] = yDateFormat.format(new Date((long) y));
                            } else {
                                result[2] = this.getYFormat().format(y / tickUnitSize);
                            }
                        }
                        return result;
                    }

                });
    } else {
        range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    }
    // y-axis label
    setChartRangeLabel(range);
}

From source file:org.pentaho.platform.uifoundation.chart.PentahoChartURLTagFragmentGenerator.java

@Override
public String generateURLFragment(final String urlText) {
    if (urlFragment != null) {

        String urlTemplate = " href=\""; //$NON-NLS-1$

        // do not add ase URL if script
        boolean isScript = urlFragment.startsWith("javascript:"); //$NON-NLS-1$ 

        // If isScript is true, ignore useBaseURL parameter...
        if (!isScript) {
            if (useBaseUrl) {
                urlTemplate += PentahoSystem.getApplicationContext().getFullyQualifiedServerURL();
            }/*w  w  w.j  a  v a  2 s.c  o  m*/
        }

        // Handle " in the urlFragment
        urlTemplate += urlFragment.replaceAll("\"", "%22") + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 

        String value = null;
        String itemValue = null;

        // Do we have a 'category=' as part of the urlText in? If so, grab the value from the urlText
        // this is the replacement value for the paramName parameter (when categorical).
        value = retrieveValue(PentahoChartURLTagFragmentGenerator.CATEGORY_TAG, urlText);

        if (value != null) {
            urlTemplate = TemplateUtil.applyTemplate(urlTemplate, parameterName, value); // <paramName> replacement
                                                                                         // value
        }

        // Do we have a 'series=' as part of the urlText in? If so, grab the value from the urlText
        // this is the replacement value for the series-name parameter.
        value = retrieveValue(PentahoChartURLTagFragmentGenerator.SERIES_TAG, urlText);
        if (value != null) {

            if ((dataset instanceof CategoryDatasetChartDefinition)
                    || (dataset instanceof XYZSeriesCollectionChartDefinition)) {

                urlTemplate = TemplateUtil.applyTemplate(urlTemplate, seriesName, value); // <series-name> replacement
                                                                                          // value

            } else if (dataset instanceof XYDataset) {

                XYDataset set = (XYDataset) dataset;
                Comparable<?> seriesKey = set.getSeriesKey(Integer.parseInt(value));
                urlTemplate = TemplateUtil.applyTemplate(urlTemplate, seriesName, seriesKey.toString()); // <series-name>
                                                                                                         // replacement
                                                                                                         // value

                // Do we have an 'item=' as part of the urlText in? If so, grab the value from the urlText
                // this is the replacement value for the paramName parameter, when the chart is an x/y plot.
                itemValue = retrieveValue(PentahoChartURLTagFragmentGenerator.ITEM_TAG, urlText);

                if (itemValue != null) {

                    int itemVal = Integer.parseInt(itemValue);
                    int val = Integer.parseInt(value);

                    Object x = null;
                    Number xNum = set.getX(val, itemVal);
                    x = (xNum instanceof Long) ? new Date((Long) xNum) : xNum;

                    urlTemplate = TemplateUtil.applyTemplate(urlTemplate, parameterName, x.toString()); // <paramName>
                                                                                                        // replacement
                                                                                                        // value

                    // This value is NEW. We have never returned more than 2 parameters in the url-template.
                    // A logical extension for x/y plots is to return the series, the x value and the y value.
                    // However, the item value is not plumbed through to the chart definition yet.
                    Object y = null;
                    Number yNum = set.getY(val, itemVal);
                    y = (yNum instanceof Long) ? new Date((Long) yNum) : yNum;

                    urlTemplate = TemplateUtil.applyTemplate(urlTemplate, "ITEM", y.toString()); // {ITEM} replacement
                                                                                                 // value,
                                                                                                 // in the
                                                                                                 // url-template. There
                                                                                                 // is no
                                                                                                 // parameter
                                                                                                 // plumbed for this.
                }
            }
        }

        if (!isScript) {
            urlTemplate = urlTemplate + " target=\"" + urlTarget + "\""; //$NON-NLS-1$//$NON-NLS-2$ 
        }

        return urlTemplate;
    } else {
        return super.generateURLFragment(urlText);
    }
}

From source file:net.sf.mzmine.chartbasics.gui.javafx.EChartViewer.java

/**
 * Default tries to extract all series from an XYDataset or XYZDataset<br>
 * series 1 | Series 2 <br>//from  www.  java 2s.c om
 * x y x y x y z x y z
 * 
 * @return Data array[columns][rows]
 */
public Object[][] getDataArrayForExport() {
    if (getChart().getPlot() instanceof XYPlot && getChart().getXYPlot() != null
            && getChart().getXYPlot().getDataset() != null) {
        try {
            List<Object[]> modelList = new ArrayList<>();

            for (int d = 0; d < getChart().getXYPlot().getDatasetCount(); d++) {
                XYDataset data = getChart().getXYPlot().getDataset(d);
                if (data instanceof XYZDataset) {
                    XYZDataset xyz = (XYZDataset) data;
                    int series = data.getSeriesCount();
                    Object[][] model = new Object[series * 3][];
                    for (int s = 0; s < series; s++) {
                        int size = 2 + xyz.getItemCount(s);
                        Object[] x = new Object[size];
                        Object[] y = new Object[size];
                        Object[] z = new Object[size];
                        // create new Array model[row][col]
                        // Write header
                        Comparable title = data.getSeriesKey(series);
                        x[0] = title;
                        y[0] = "";
                        z[0] = "";
                        x[1] = getChart().getXYPlot().getDomainAxis().getLabel();
                        y[1] = getChart().getXYPlot().getRangeAxis().getLabel();
                        z[1] = "z-axis";
                        // write data
                        for (int i = 0; i < xyz.getItemCount(s); i++) {
                            x[i + 2] = xyz.getX(s, i);
                            y[i + 2] = xyz.getY(s, i);
                            z[i + 2] = xyz.getZ(s, i);
                        }
                        model[s * 3] = x;
                        model[s * 3 + 1] = y;
                        model[s * 3 + 2] = z;
                    }

                    for (Object[] o : model)
                        modelList.add(o);
                } else {
                    int series = data.getSeriesCount();
                    Object[][] model = new Object[series * 2][];
                    for (int s = 0; s < series; s++) {
                        int size = 2 + data.getItemCount(s);
                        Object[] x = new Object[size];
                        Object[] y = new Object[size];
                        // create new Array model[row][col]
                        // Write header
                        Comparable title = data.getSeriesKey(s);
                        x[0] = title;
                        y[0] = "";
                        x[1] = getChart().getXYPlot().getDomainAxis().getLabel();
                        y[1] = getChart().getXYPlot().getRangeAxis().getLabel();
                        // write data
                        for (int i = 0; i < data.getItemCount(s); i++) {
                            x[i + 2] = data.getX(s, i);
                            y[i + 2] = data.getY(s, i);
                        }
                        model[s * 2] = x;
                        model[s * 2 + 1] = y;
                    }

                    for (Object[] o : model)
                        modelList.add(o);
                }
            }

            return modelList.toArray(new Object[modelList.size()][]);
        } catch (Exception ex) {
            logger.log(Level.WARNING, "Cannot retrieve data for export", ex);
            return null;
        }
    }
    return null;
}

From source file:net.sf.mzmine.chartbasics.gui.swing.EChartPanel.java

/**
 * Default tries to extract all series from an XYDataset or XYZDataset<br>
 * series 1 | Series 2 <br>//  w w w. j a v a 2  s.c o m
 * x y x y x y z x y z
 * 
 * @return Data array[columns][rows]
 */
public Object[][] getDataArrayForExport() {
    if (getChart().getPlot() instanceof XYPlot && getChart().getXYPlot() != null
            && getChart().getXYPlot().getDataset() != null) {
        try {
            List<Object[]> modelList = new ArrayList<>();

            for (int d = 0; d < getChart().getXYPlot().getDatasetCount(); d++) {
                XYDataset data = getChart().getXYPlot().getDataset(d);
                if (data instanceof XYZDataset) {
                    XYZDataset xyz = (XYZDataset) data;
                    int series = data.getSeriesCount();
                    Object[][] model = new Object[series * 3][];
                    for (int s = 0; s < series; s++) {
                        int size = 2 + xyz.getItemCount(s);
                        Object[] x = new Object[size];
                        Object[] y = new Object[size];
                        Object[] z = new Object[size];
                        // create new Array model[row][col]
                        // Write header
                        Comparable title = data.getSeriesKey(series);
                        x[0] = title;
                        y[0] = "";
                        z[0] = "";
                        x[1] = getChart().getXYPlot().getDomainAxis().getLabel();
                        y[1] = getChart().getXYPlot().getRangeAxis().getLabel();
                        z[1] = "z-axis";
                        // write data
                        for (int i = 0; i < xyz.getItemCount(s); i++) {
                            x[i + 2] = xyz.getX(s, i);
                            y[i + 2] = xyz.getY(s, i);
                            z[i + 2] = xyz.getZ(s, i);
                        }
                        model[s * 3] = x;
                        model[s * 3 + 1] = y;
                        model[s * 3 + 2] = z;
                    }

                    for (Object[] o : model)
                        modelList.add(o);
                } else {
                    int series = data.getSeriesCount();
                    Object[][] model = new Object[series * 2][];
                    for (int s = 0; s < series; s++) {
                        int size = 2 + data.getItemCount(s);
                        Object[] x = new Object[size];
                        Object[] y = new Object[size];
                        // create new Array model[row][col]
                        // Write header
                        Comparable title = data.getSeriesKey(s);
                        x[0] = title;
                        y[0] = "";
                        x[1] = getChart().getXYPlot().getDomainAxis().getLabel();
                        y[1] = getChart().getXYPlot().getRangeAxis().getLabel();
                        // write data
                        for (int i = 0; i < data.getItemCount(s); i++) {
                            x[i + 2] = data.getX(s, i);
                            y[i + 2] = data.getY(s, i);
                        }
                        model[s * 2] = x;
                        model[s * 2 + 1] = y;
                    }

                    for (Object[] o : model)
                        modelList.add(o);
                }
            }

            return modelList.toArray(new Object[modelList.size()][]);
        } catch (Exception ex) {
            return null;
        }
    }
    return null;
}