private JFreeChart buildDifferenceChart(TimeSeriesCollection dataset, String title) { // Creat the chart JFreeChart chart = ChartFactory.createTimeSeriesChart( title, "Date", "Price", dataset, true, // legend true, // tool tips false // URLs ); chart.setBackgroundPaint(Color.white); XYPlot plot = chart.getXYPlot(); plot.setRenderer( new XYDifferenceRenderer(new Color(112, 128, 222), new Color(112, 128, 222), false)); plot.setBackgroundPaint(Color.white); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(UnitType.ABSOLUTE, 5.0, 5.0, 5.0, 5.0)); ValueAxis domainAxis = new DateAxis("Date"); domainAxis.setLowerMargin(0.0); domainAxis.setUpperMargin(0.0); plot.setDomainAxis(domainAxis); plot.setForegroundAlpha(0.5f); return chart; }
public MyDemoPanel() { super(new BorderLayout()); lastValue = new double[3]; CombinedDomainXYPlot combineddomainxyplot = new CombinedDomainXYPlot(new DateAxis("Time")); datasets = new TimeSeriesCollection[3]; for (int i = 0; i < 3; i++) { lastValue[i] = 100D; TimeSeries timeseries = new TimeSeries("Random " + i); datasets[i] = new TimeSeriesCollection(timeseries); NumberAxis numberaxis = new NumberAxis("Y" + i); numberaxis.setAutoRangeIncludesZero(false); XYPlot xyplot = new XYPlot(datasets[i], null, numberaxis, new StandardXYItemRenderer()); xyplot.setBackgroundPaint(Color.lightGray); xyplot.setDomainGridlinePaint(Color.white); xyplot.setRangeGridlinePaint(Color.white); combineddomainxyplot.add(xyplot); } JFreeChart jfreechart = new JFreeChart("Dynamic Data Demo 3", combineddomainxyplot); addChart(jfreechart); LegendTitle legendtitle = (LegendTitle) jfreechart.getSubtitle(0); legendtitle.setPosition(RectangleEdge.RIGHT); legendtitle.setMargin(new RectangleInsets(UnitType.ABSOLUTE, 0.0D, 4D, 0.0D, 4D)); jfreechart.setBorderPaint(Color.black); jfreechart.setBorderVisible(true); ValueAxis valueaxis = combineddomainxyplot.getDomainAxis(); valueaxis.setAutoRange(true); valueaxis.setFixedAutoRange(20000D); ChartUtilities.applyCurrentTheme(jfreechart); ChartPanel chartpanel = new ChartPanel(jfreechart); add(chartpanel); JPanel jpanel = new JPanel(new FlowLayout()); for (int j = 0; j < 3; j++) { JButton jbutton1 = new JButton("Series " + j); jbutton1.setActionCommand("ADD_DATA_" + j); jbutton1.addActionListener(this); jpanel.add(jbutton1); } JButton jbutton = new JButton("ALL"); jbutton.setActionCommand("ADD_ALL"); jbutton.addActionListener(this); jpanel.add(jbutton); add(jpanel, "South"); chartpanel.setPreferredSize(new Dimension(500, 470)); chartpanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); }
public String generateBarChart( String hitSection, HttpSession session, PrintWriter pw, String courseId, int studentId) { /* int groupId=0; if (groupName.equals("All")){ groupId=0; }else{ groupId = studStatisticBean.getGroupIdByName(groupName); }*/ String filename = null; try { // Retrieve list of WebHits StudentsConceptChartDataSet cDataSet = new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId); ArrayList list = cDataSet.getDataBySection(hitSection); // Throw a custom NoDataException if there is no data if (list.size() == 0) { System.out.println("No data has been found"); throw new NoDataException(); } // Create and populate a CategoryDataset Iterator iter = list.listIterator(); DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); while (iter.hasNext()) { StudentsConceptHit wh = (StudentsConceptHit) iter.next(); // Comparable c1= Double.parseDouble(wh.getHitDegree()); dataSet.addValue( wh.getHitDegree(), "degree of mastery for concept ", String.valueOf(wh.getHitConcept())); } // Create the chart object CategoryAxis categoryAxis = new CategoryAxis("Concepts"); ValueAxis valueAxis = new NumberAxis("Degree of Mastery"); valueAxis.setRange(0.0, 6.0); categoryAxis.setCategoryLabelPositions( new CategoryLabelPositions().createUpRotationLabelPositions(45)); BarRenderer renderer = new BarRenderer(); renderer.setDrawBarOutline(true); renderer.setItemURLGenerator( new StandardCategoryURLGenerator("xy_chart.jsp", "series", "section")); StandardCategoryToolTipGenerator scttg = new StandardCategoryToolTipGenerator(); renderer.setToolTipGenerator(scttg); Plot plot = new CategoryPlot(dataSet, categoryAxis, valueAxis, renderer); JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(java.awt.Color.white); // Write the chart image to the temporary directory ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); // Write the image map to the PrintWriter ChartUtilities.writeImageMap(pw, filename, info); pw.flush(); } catch (NoDataException e) { System.out.println(e.toString()); filename = "public_nodata_500x300.png"; } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; }
public String generateXYChart( String section, HttpSession session, PrintWriter pw, String courseId, int studentId) { /*int groupId=0; if (groupName.equals("All")){ groupId=0; }else{ groupId = studStatisticBean.getGroupIdByName(groupName); }*/ String filename = null; try { // Retrieve list of WebHits StudentsConceptChartDataSet cDataSet = new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId); ArrayList list = cDataSet.getDataByHitConcept(section); // Throw a custom NoDataException if there is no data if (list.size() == 0) { System.out.println("No data has been found"); throw new NoDataException(); } // Create and populate an XYSeries Collection XYSeries dataSeries = new XYSeries("Students progress line"); Iterator iter = list.listIterator(); while (iter.hasNext()) { StudentsConceptHit ch = (StudentsConceptHit) iter.next(); dataSeries.add(ch.getOrdNumb(), ch.getHitDegree()); } XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries); NumberFormat nf = NumberFormat.getIntegerInstance(); NumberFormat nf2 = NumberFormat.getInstance(); String cTitle = null; // StandardXYToolTipGenerator ttg = new // StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,nf,nf2); CustomXYToolTipGenerator ttg = new CustomXYToolTipGenerator(); ttg.addToolTipSeries(cDataSet.getConceptNames()); StandardXYURLGenerator sxyUrlGen = new StandardXYURLGenerator("#", xyDataset.getSeriesName(0), "PassedConceptOrdNum"); ValueAxis ordNumAxis = new NumberAxis("Concept ordinal number"); NumberAxis valueAxis = new NumberAxis("Current knowledge"); // valueAxis.setAutoRangeIncludesZero(true); valueAxis.setRange(0.0, 6.0); // override default ordNumAxis.setAutoRange(true); ordNumAxis.setLowerMargin(0.0); StandardXYItemRenderer renderer = new StandardXYItemRenderer( StandardXYItemRenderer.LINES + StandardXYItemRenderer.SHAPES, ttg, sxyUrlGen); Marker marker = new ValueMarker(1.50); // / Marker marker2 = new ValueMarker(2.50); Marker marker3 = new ValueMarker(3.50); Marker marker4 = new ValueMarker(4.50); Marker marker5 = new ValueMarker(5.00); renderer.setShapesFilled(true); XYPlot plot = new XYPlot(xyDataset, ordNumAxis, valueAxis, renderer); plot.addRangeMarker(marker); plot.addRangeMarker(marker2); plot.addRangeMarker(marker3); plot.addRangeMarker(marker4); plot.addRangeMarker(marker5); XYTextAnnotation xyBad = new XYTextAnnotation("Bad", 1, 1); xyBad.setX(0.2); xyBad.setY(0.75); XYTextAnnotation xyNotBad = new XYTextAnnotation("Not Bad", 1, 1); xyNotBad.setX(0.2); xyNotBad.setY(2); XYTextAnnotation xyGood = new XYTextAnnotation("Good", 1, 1); xyGood.setX(0.2); xyGood.setY(3); XYTextAnnotation xyVeryGood = new XYTextAnnotation("Very Good", 1, 1); xyVeryGood.setX(0.2); xyVeryGood.setY(4); XYTextAnnotation xyExcellent = new XYTextAnnotation("Excellent", 1, 1); xyExcellent.setX(0.2); xyExcellent.setY(4.75); XYTextAnnotation xyExpert = new XYTextAnnotation("Expert", 1, 1); xyExpert.setX(0.2); xyExpert.setY(5.25); plot.addAnnotation(xyBad); plot.addAnnotation(xyNotBad); plot.addAnnotation(xyGood); plot.addAnnotation(xyVeryGood); plot.addAnnotation(xyExcellent); plot.addAnnotation(xyExpert); JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(java.awt.Color.white); // Write the chart image to the temporary directory ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); // Write the image map to the PrintWriter ChartUtilities.writeImageMap(pw, filename, info); pw.flush(); } catch (NoDataException e) { System.out.println(e.toString()); filename = "public_nodata_500x300.png"; } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; }
protected JFreeChart createChart( DSLAMSource source, String LID, Timeinterval time, Properties properties, GraphRenderingInput input, Map<String, Object> colorScheme, Properties outputProperties) throws IOException { JFreeChart res = null; { JFreeChart chart = null; Timeinterval domainAxisTime = null; // Set 'chart': { String domainAxisTitle = null; // Set 'domainAxisTime': { DateFormat format = (DateFormat) colorScheme.get("date.format"); domainAxisTitle = "Time (" + time.toString(format) + ")"; } chart = ChartFactory.createTimeSeriesChart( null, // chart-title domainAxisTitle, // domain-axis label null, // value-axis label null, // dataset true, // legends required true, // generate tooltips false // generate URLs ); } XYPlot plot = chart.getXYPlot(); plot.setOrientation(PlotOrientation.VERTICAL); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.getRangeAxis().setFixedDimension(15.0); // Fix the domain axis: { fixDateAxisToTimeinterval(plot, time); domainAxisTime = time; } // Set the y-axis: { String axisTitle = "Count (/900s)"; ValueAxis a = new LogarithmicAxis(axisTitle); a.setLowerBound(0); a.setUpperBound(1000); // TODO: '1000' is '900' rounded up to nearest power of 10! // TODO: Get unit from data-model! // TODO: Get upper bound from data-model! plot.setRangeAxis(a); } String title = getTitle(); setDefaults(chart, colorScheme); setTitle(chart, LID, colorScheme, title, source, time); String filter = ""; // an empty string implies the default filter! // Set 'filter': { if (input != null) { Properties p = input.getProperties(); if (p != null) { String v = p.getProperty("data.filter"); if (v != null) { filter = v; } } } } addData(chart, source, time, filter, properties, colorScheme, outputProperties); if (outputProperties != null) { if (domainAxisTime != null) { outputProperties.setProperty("axis.domain.time", time.toString()); } } res = chart; } return res; }
public void draw(Graphics2D g, Point2DDataset data) { int dataCount = data.getCount(); // Retain the integrated min/max integratedMinX = java.lang.Double.isNaN(data.getXMinValue()) ? integratedMinX : Math.min(integratedMinX, data.getXMinValue()); integratedMinY = java.lang.Double.isNaN(data.getYMinValue()) ? integratedMinY : Math.min(integratedMinY, data.getYMinValue()); integratedMaxX = java.lang.Double.isNaN(data.getXMaxValue()) ? integratedMaxX : Math.max(integratedMaxX, data.getXMaxValue()); integratedMaxY = java.lang.Double.isNaN(data.getYMaxValue()) ? integratedMaxY : Math.max(integratedMaxY, data.getYMaxValue()); // Determine range of the plot. // If no range is set, use the one from the dataset double startXPlot; double startYPlot; double endXPlot; double endYPlot; if (rangeFromDataset) { startXPlot = integratedMinX; startYPlot = integratedMinY; endXPlot = integratedMaxX; endYPlot = integratedMaxY; } else { startXPlot = startPlotX; startYPlot = startPlotY; endXPlot = endPlotX; endYPlot = endPlotY; } int margin = 3; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); g.setColor(Color.BLACK); // Compute axis ValueAxis xAxis = ValueAxis.createAutoAxis(startXPlot, endXPlot, Math.max(2, width / 60)); ValueAxis yAxis = ValueAxis.createAutoAxis(startYPlot, endYPlot, Math.max(2, height / 60)); HorizontalAxisRenderer xAxisRenderer = new HorizontalAxisRenderer(xAxis, margin, g); VerticalAxisRenderer yAxisRenderer = new VerticalAxisRenderer(yAxis, margin, g); // Compute graph area int xStartGraph = yAxisRenderer.getAxisWidth(); int xEndGraph = width - margin; int yStartGraph = margin; int yEndGraph = height - xAxisRenderer.getAxisHeight(); int plotWidth = xEndGraph - xStartGraph; int plotHeight = yEndGraph - yStartGraph; // Draw axis xAxisRenderer.draw(g, 0, xStartGraph, xEndGraph, width, yEndGraph); yAxisRenderer.draw(g, 0, yStartGraph, yEndGraph, height, xStartGraph); double rangeX = endXPlot - startXPlot; double rangeY = endYPlot - startYPlot; // Scale data int[] scaledX = new int[dataCount]; int[] scaledY = new int[dataCount]; ListNumber xValues = data.getXValues(); ListNumber yValues = data.getYValues(); for (int i = 0; i < scaledY.length; i++) { scaledX[i] = (int) (xStartGraph + NumberUtil.scale(xValues.getDouble(i), startXPlot, endXPlot, plotWidth)); scaledY[i] = (int) (height - xAxisRenderer.getAxisHeight() - NumberUtil.scale(yValues.getDouble(i), startYPlot, endYPlot, plotHeight)); } // Draw reference lines g.setColor(new Color(240, 240, 240)); int[] xTicks = xAxisRenderer.horizontalTickPositions(); for (int xTick : xTicks) { g.drawLine(xTick, yStartGraph, xTick, yEndGraph); } int[] yTicks = yAxisRenderer.verticalTickPositions(); for (int yTick : yTicks) { g.drawLine(xStartGraph, height - yTick, xEndGraph, height - yTick); } g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g.setColor(Color.BLACK); // Make sure that the line does not go ouside the chart g.setClip(xStartGraph - 1, yStartGraph - 1, plotWidth + 2, plotHeight + 2); for (int i = 0; i < scaledY.length; i++) { g.draw(createShape(scaledX[i], scaledY[i])); } }