List of usage examples for org.jfree.chart.renderer.xy XYErrorRenderer setSeriesPaint
public void setSeriesPaint(int series, Paint paint)
From source file:projects.wdlf47tuc.ProcessAllSwathcal.java
/** * Computes the luminosity function for the current boxed region and plots it in a JFrame. * Also prints out the coordinates of the selection box vertices and the luminosity function * quantities./*from w w w. j a v a 2 s. c o m*/ * * @param sources * The {@link Source}s to compute the luminosity function for. */ private void computeAndPlotLuminosityFunction(List<Source> sources) { // Print out coordinates of selection box corners System.out.println("# Coordinates of selection box corners:"); System.out.println("# (" + col1Filter + "-" + col2Filter + ")\t" + magFilter); for (double[] point : points) { System.out.println("# " + point[0] + "\t" + point[1]); } System.out.println("# Luminosity function:"); System.out.println("# Mag.\tN\tsigN"); double magBinWidth = 0.5; // Get the range of the data double mMin = Double.MAX_VALUE; double mMax = -Double.MAX_VALUE; for (Source source : sources) { double mag = source.getMag(magFilter) - mu; mMin = Math.min(mMin, mag); mMax = Math.max(mMax, mag); } // Quantize this to a whole number mMin = Math.floor(mMin); mMax = Math.ceil(mMax); int nBins = (int) Math.rint((mMax - mMin) / magBinWidth); // Array to accumulate all objects in each bin int[] n = new int[nBins]; for (Source source : sources) { double mag = source.getMag(magFilter) - mu; // Bin number int bin = (int) Math.floor((mag - mMin) / magBinWidth); n[bin]++; } YIntervalSeries luminosityFunction = new YIntervalSeries("Luminosity Function"); for (int i = 0; i < nBins; i++) { // Bin centre double x = mMin + i * magBinWidth + 0.5 * magBinWidth; double y = n[i]; double yErr = n[i] > 0 ? Math.sqrt(y) : 0; luminosityFunction.add(x, y, y - yErr, y + yErr); System.out.println(x + "\t" + y + "\t" + yErr); } final YIntervalSeriesCollection data = new YIntervalSeriesCollection(); data.addSeries(luminosityFunction); XYErrorRenderer renderer = new XYErrorRenderer(); renderer.setSeriesLinesVisible(0, true); renderer.setSeriesShapesVisible(0, true); renderer.setSeriesShape(0, new Ellipse2D.Float(-1f, -1f, 2, 2)); renderer.setSeriesPaint(0, ChartColor.BLACK); NumberAxis xAxis = new NumberAxis("Absolute Magnitude (" + magFilter.toString() + ")"); xAxis.setAutoRange(true); xAxis.setAutoRangeIncludesZero(false); NumberAxis yAxis = new NumberAxis("N"); yAxis.setAutoRange(true); yAxis.setAutoRangeIncludesZero(true); // Configure plot XYPlot xyplot = new XYPlot(data, xAxis, yAxis, renderer); xyplot.setBackgroundPaint(Color.lightGray); xyplot.setDomainGridlinePaint(Color.white); xyplot.setDomainGridlinesVisible(true); xyplot.setRangeGridlinePaint(Color.white); // Configure chart JFreeChart chart = new JFreeChart("Luminosity Function", xyplot); chart.setBackgroundPaint(Color.white); chart.setTitle("47 Tuc luminosity function"); chart.removeLegend(); final ChartPanel lfChartPanel = new ChartPanel(chart); java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame tester = new JFrame(); tester.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); tester.setLayout(new BorderLayout()); tester.add(lfChartPanel, BorderLayout.CENTER); tester.pack(); tester.setVisible(true); } }); }
From source file:org.esa.beam.timeseries.ui.graph.TimeSeriesGraphModel.java
private void updatePlot(boolean hasData) { for (int i = 0; i < timeSeriesPlot.getDatasetCount(); i++) { timeSeriesPlot.setDataset(i, null); }//www .j av a 2s .c o m timeSeriesPlot.clearRangeAxes(); if (!hasData) { return; } paintMap.clear(); final Set<String> aliasNamesSet = displayAxisMapping.getAliasNames(); final String[] aliasNames = aliasNamesSet.toArray(new String[aliasNamesSet.size()]); for (String aliasName : aliasNamesSet) { consumeColors(aliasName, displayAxisMapping.getRasterNames(aliasName), QUALIFIER_RASTER); consumeColors(aliasName, displayAxisMapping.getInsituNames(aliasName), QUALIFIER_INSITU); } for (int aliasIdx = 0; aliasIdx < aliasNames.length; aliasIdx++) { String aliasName = aliasNames[aliasIdx]; timeSeriesPlot.setRangeAxis(aliasIdx, createValueAxis(aliasName)); final int aliasIndexOffset = aliasIdx * 3; final int cursorCollectionIndex = aliasIndexOffset + CURSOR_COLLECTION_INDEX_OFFSET; final int pinCollectionIndex = aliasIndexOffset + PIN_COLLECTION_INDEX_OFFSET; final int insituCollectionIndex = aliasIndexOffset + INSITU_COLLECTION_INDEX_OFFSET; TimeSeriesCollection cursorDataset = new TimeSeriesCollection(); timeSeriesPlot.setDataset(cursorCollectionIndex, cursorDataset); TimeSeriesCollection pinDataset = new TimeSeriesCollection(); timeSeriesPlot.setDataset(pinCollectionIndex, pinDataset); TimeSeriesCollection insituDataset = new TimeSeriesCollection(); timeSeriesPlot.setDataset(insituCollectionIndex, insituDataset); timeSeriesPlot.mapDatasetToRangeAxis(cursorCollectionIndex, aliasIdx); timeSeriesPlot.mapDatasetToRangeAxis(pinCollectionIndex, aliasIdx); timeSeriesPlot.mapDatasetToRangeAxis(insituCollectionIndex, aliasIdx); final XYErrorRenderer pinRenderer = createXYErrorRenderer(); final XYErrorRenderer cursorRenderer = createXYErrorRenderer(); final XYErrorRenderer insituRenderer = createXYErrorRenderer(); pinRenderer.setBaseStroke(PIN_STROKE); cursorRenderer.setBaseStroke(CURSOR_STROKE); insituRenderer.setBaseLinesVisible(false); insituRenderer.setBaseShapesFilled(false); final List<String> rasterNamesSet = displayAxisMapping.getRasterNames(aliasName); final String[] rasterNames = rasterNamesSet.toArray(new String[rasterNamesSet.size()]); for (int i = 0; i < rasterNames.length; i++) { final String paintKey = aliasName + QUALIFIER_RASTER + rasterNames[i]; final Paint paint = paintMap.get(paintKey); cursorRenderer.setSeriesPaint(i, paint); pinRenderer.setSeriesPaint(i, paint); } final List<String> insituNamesSet = displayAxisMapping.getInsituNames(aliasName); final String[] insituNames = insituNamesSet.toArray(new String[insituNamesSet.size()]); for (int i = 0; i < insituNames.length; i++) { final String paintKey = aliasName + QUALIFIER_INSITU + insituNames[i]; final Paint paint = paintMap.get(paintKey); insituRenderer.setSeriesPaint(i, paint); } timeSeriesPlot.setRenderer(cursorCollectionIndex, cursorRenderer); timeSeriesPlot.setRenderer(pinCollectionIndex, pinRenderer); timeSeriesPlot.setRenderer(insituCollectionIndex, insituRenderer); } }
From source file:weka.classifiers.timeseries.eval.graph.JFreeChartDriver.java
protected JFreeChart getFutureForecastChart(TSForecaster forecaster, List<List<NumericPrediction>> preds, List<String> targetNames, Instances history) { if (forecaster instanceof TSLagUser && history != null) { TSLagMaker lagMaker = ((TSLagUser) forecaster).getTSLagMaker(); if (lagMaker.getAdjustForTrends() && !lagMaker.isUsingAnArtificialTimeIndex()) { // fill in any missing time stamps only history = new Instances(history); history = weka.classifiers.timeseries.core.Utils.replaceMissing(history, null, lagMaker.getTimeStampField(), true, lagMaker.getPeriodicity(), lagMaker.getSkipEntries()); }/*ww w. j a va2 s. c om*/ } // set up a collection of series XYIntervalSeriesCollection xyDataset = new XYIntervalSeriesCollection(); if (history != null) { // add actual historical data values for (String targetName : targetNames) { XYIntervalSeries targetSeries = new XYIntervalSeries(targetName, false, false); xyDataset.addSeries(targetSeries); } } // add predicted series for (String targetName : targetNames) { XYIntervalSeries targetSeries = new XYIntervalSeries(targetName + "-predicted", false, false); xyDataset.addSeries(targetSeries); } ValueAxis timeAxis = null; NumberAxis valueAxis = new NumberAxis(""); valueAxis.setAutoRangeIncludesZero(false); int timeIndex = -1; boolean timeAxisIsDate = false; double artificialTimeStart = 0; double lastRealTimeValue = Utils.missingValue(); if (forecaster instanceof TSLagUser && history != null) { TSLagMaker lagMaker = ((TSLagUser) forecaster).getTSLagMaker(); if (!lagMaker.isUsingAnArtificialTimeIndex() && lagMaker.getAdjustForTrends()) { String timeName = lagMaker.getTimeStampField(); if (history.attribute(timeName).isDate()) { timeAxis = new DateAxis(""); timeAxisIsDate = true; timeIndex = history.attribute(timeName).index(); } } else { try { artificialTimeStart = (history != null) ? 1 : lagMaker.getArtificialTimeStartValue() + 1; } catch (Exception ex) { } } } if (timeAxis == null) { timeAxis = new NumberAxis(""); ((NumberAxis) timeAxis).setAutoRangeIncludesZero(false); } boolean hasConfidenceIntervals = false; // now populate the series if (history != null) { // do the actuals first for (int i = 0; i < history.numInstances(); i++) { Instance current = history.instance(i); for (String targetName : targetNames) { int dataIndex = history.attribute(targetName.trim()).index(); if (dataIndex >= 0) { XYIntervalSeries actualSeries = null; int actualIndex = xyDataset.indexOf(targetName); actualSeries = xyDataset.getSeries(actualIndex); double x = Utils.missingValue(); if (timeAxisIsDate) { x = current.value(timeIndex); if (!Utils.isMissingValue(x)) { lastRealTimeValue = x; } } else { x = artificialTimeStart; } double y = Utils.missingValue(); y = current.value(dataIndex); if (!Utils.isMissingValue(x) && !Utils.isMissingValue(y)) { if (actualSeries != null) { actualSeries.add(x, x, x, y, y, y); } } } } if (!timeAxisIsDate) { artificialTimeStart++; } } } // now do the futures List<String> forecasterTargets = AbstractForecaster.stringToList(forecaster.getFieldsToForecast()); // loop over the steps for (int j = 0; j < preds.size(); j++) { List<NumericPrediction> predsForStepJ = preds.get(j); // advance the real time index (if appropriate) if (timeAxisIsDate) { lastRealTimeValue = ((TSLagUser) forecaster).getTSLagMaker() .advanceSuppliedTimeValue(lastRealTimeValue); } for (String targetName : targetNames) { // look up this requested target in the list that the forecaster // has predicted int predIndex = forecasterTargets.indexOf(targetName.trim()); if (predIndex >= 0) { NumericPrediction predsForTargetAtStepJ = predsForStepJ.get(predIndex); XYIntervalSeries predSeries = null; int datasetIndex = xyDataset.indexOf(targetName + "-predicted"); predSeries = xyDataset.getSeries(datasetIndex); if (predSeries != null) { double y = predsForTargetAtStepJ.predicted(); double x = Utils.missingValue(); double yHigh = y; double yLow = y; double[][] conf = predsForTargetAtStepJ.predictionIntervals(); if (conf.length > 0) { yLow = conf[0][0]; yHigh = conf[0][1]; hasConfidenceIntervals = true; } if (!timeAxisIsDate) { x = artificialTimeStart; } else { x = lastRealTimeValue; } if (!Utils.isMissingValue(x) && !Utils.isMissingValue(y)) { predSeries.add(x, x, x, y, yLow, yHigh); } } } } // advance the artificial time index (if appropriate) if (!timeAxisIsDate) { artificialTimeStart++; } } String title = "Future forecast for: "; for (String s : targetNames) { title += s + ","; } title = title.substring(0, title.lastIndexOf(",")); /* * String algoSpec = forecaster.getAlgorithmName(); title += " (" + algoSpec * + ")"; */ if (forecaster instanceof WekaForecaster && hasConfidenceIntervals) { double confPerc = ((WekaForecaster) forecaster).getConfidenceLevel() * 100.0; title += " [" + Utils.doubleToString(confPerc, 0) + "% conf. intervals]"; } XYErrorRenderer renderer = new XYErrorRenderer(); // renderer.setShapesFilled(true); XYPlot plot = new XYPlot(xyDataset, timeAxis, valueAxis, renderer); // renderer = (XYErrorRenderer)plot.getRenderer(); if (history != null) { for (String targetName : targetNames) { XYIntervalSeries predSeries = null; int predIndex = xyDataset.indexOf(targetName + "-predicted"); predSeries = xyDataset.getSeries(predIndex); XYIntervalSeries actualSeries = null; int actualIndex = xyDataset.indexOf(targetName); actualSeries = xyDataset.getSeries(actualIndex); if (actualSeries != null && predSeries != null) { // match the color of the actual series java.awt.Paint actualPaint = renderer.lookupSeriesPaint(actualIndex); renderer.setSeriesPaint(predIndex, actualPaint); // now set the line style to dashed BasicStroke dashed = new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, new float[] { 5.0f }, 0.0f); renderer.setSeriesStroke(predIndex, dashed); } } } renderer.setBaseLinesVisible(true); renderer.setDrawXError(false); renderer.setDrawYError(true); JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(java.awt.Color.white); TextTitle chartTitle = chart.getTitle(); String fontName = chartTitle.getFont().getFontName(); java.awt.Font newFont = new java.awt.Font(fontName, java.awt.Font.PLAIN, 12); chartTitle.setFont(newFont); return chart; }
From source file:jhplot.HChart.java
/** * Draw data from a P1D. Drawing updated automatically. 1st level errors are * shown if the dimension is above 5. Otherwise show X and Y. If you set * setChartPolar() before,m you can also show polar coordinates. * /* www .ja va 2s. co m*/ * @param d * input P1D container */ public void add(P1D d) { if (cdatPolar[N1][N2] != null) { XYSeries SerData = new XYSeries(d.getTitle()); for (int i = 0; i < d.size(); i++) SerData.add(d.getX(i), d.getY(i)); cdatPolar[N1][N2].addSeries(SerData); return; // return if this is polar chart } // assume XY chart // System.out.println(d.dimension()); LinePars lpp = d.getDrawOption(); float width = (float) lpp.getPenWidth(); int style = d.getLineStyle(); float dash = lpp.getDashLength(); int symbol = lpp.getSymbol(); Shape shape = getShape(symbol, lpp.getSymbolSize()); // setSeriesShapesFilled(int series, java.lang.Boolean flag) // setShapesFilled(boolean filled) if (d.dimension() > 5) { XYIntervalSeriesCollection c = new XYIntervalSeriesCollection(); XYIntervalSeries SerData = new XYIntervalSeries(d.getTitle()); for (int i = 0; i < d.size(); i++) SerData.add(d.getX(i), d.getX(i) - d.getXleft(i), d.getX(i) + d.getXright(i), d.getY(i), d.getY(i) - d.getYlower(i), d.getY(i) + d.getYupper(i)); c.addSeries(SerData); xyplot[N1][N2].setDataset(indexdat[N1][N2], c); XYErrorRenderer xyerrorrenderer = new XYErrorRenderer(); xyerrorrenderer.setSeriesStroke(0, getStrokes(style, width, dash)); xyerrorrenderer.setSeriesPaint(0, d.getColor()); xyerrorrenderer.setSeriesOutlinePaint(0, d.getColor()); xyerrorrenderer.setSeriesFillPaint(0, lpp.getFillColor()); xyerrorrenderer.setSeriesShape(0, shape); if (symbol > 0 && symbol < 4) xyerrorrenderer.setSeriesShapesFilled(0, false); if (symbol > 3) xyerrorrenderer.setSeriesShapesFilled(0, true); rdat[N1][N2].add(xyerrorrenderer); type[N1][N2].put(new Integer(indexdat[N1][N2]), "pe"); indexdat[N1][N2]++; } else if (d.dimension() == 4) { XYIntervalSeriesCollection c = new XYIntervalSeriesCollection(); XYIntervalSeries SerData = new XYIntervalSeries(d.getTitle()); for (int i = 0; i < d.size(); i++) SerData.add(d.getX(i), d.getX(i), d.getX(i), d.getY(i), d.getY(i) - d.getYlower(i), d.getY(i) + d.getYupper(i)); c.addSeries(SerData); xyplot[N1][N2].setDataset(indexdat[N1][N2], c); XYErrorRenderer xyerrorrenderer = new XYErrorRenderer(); xyerrorrenderer.setSeriesStroke(0, getStrokes(style, width, dash)); xyerrorrenderer.setSeriesPaint(0, d.getColor()); xyerrorrenderer.setSeriesOutlinePaint(0, d.getColor()); xyerrorrenderer.setSeriesFillPaint(0, lpp.getFillColor()); xyerrorrenderer.setSeriesShape(0, shape); if (symbol > 0 && symbol < 4) xyerrorrenderer.setSeriesShapesFilled(0, false); if (symbol > 3) xyerrorrenderer.setSeriesShapesFilled(0, true); rdat[N1][N2].add(xyerrorrenderer); type[N1][N2].put(new Integer(indexdat[N1][N2]), "pe"); indexdat[N1][N2]++; } else if (d.dimension() == 3) { XYIntervalSeriesCollection c = new XYIntervalSeriesCollection(); XYIntervalSeries SerData = new XYIntervalSeries(d.getTitle()); for (int i = 0; i < d.size(); i++) SerData.add(d.getX(i), d.getX(i), d.getX(i), d.getY(i), d.getY(i) - d.getYupper(i), d.getY(i) + d.getYupper(i)); c.addSeries(SerData); xyplot[N1][N2].setDataset(indexdat[N1][N2], c); XYErrorRenderer xyerrorrenderer = new XYErrorRenderer(); xyerrorrenderer.setSeriesStroke(0, getStrokes(style, width, dash)); xyerrorrenderer.setSeriesPaint(0, d.getColor()); xyerrorrenderer.setSeriesOutlinePaint(0, d.getColor()); xyerrorrenderer.setSeriesFillPaint(0, lpp.getFillColor()); xyerrorrenderer.setSeriesShape(0, shape); if (symbol > 0 && symbol < 4) xyerrorrenderer.setSeriesShapesFilled(0, false); if (symbol > 3) xyerrorrenderer.setSeriesShapesFilled(0, true); rdat[N1][N2].add(xyerrorrenderer); type[N1][N2].put(new Integer(indexdat[N1][N2]), "pe"); indexdat[N1][N2]++; } else { XYSeriesCollection c = new XYSeriesCollection(); XYSeries SerData = new XYSeries(d.getTitle()); for (int i = 0; i < d.size(); i++) SerData.add(d.getX(i), d.getY(i)); c.addSeries(SerData); xyplot[N1][N2].setDataset(indexdat[N1][N2], c); XYLineAndShapeRenderer xyerrorrenderer = new XYLineAndShapeRenderer(false, true); xyerrorrenderer.setSeriesStroke(0, getStrokes(style, width, dash)); xyerrorrenderer.setSeriesPaint(0, d.getColor()); xyerrorrenderer.setSeriesOutlinePaint(0, d.getColor()); xyerrorrenderer.setSeriesFillPaint(0, lpp.getFillColor()); xyerrorrenderer.setSeriesShape(0, shape); if (symbol > 0 && symbol < 4) xyerrorrenderer.setSeriesShapesFilled(0, false); if (symbol > 3) xyerrorrenderer.setSeriesShapesFilled(0, true); rdat[N1][N2].add(xyerrorrenderer); type[N1][N2].put(new Integer(indexdat[N1][N2]), "p"); indexdat[N1][N2]++; } }