예제 #1
1
파일: Chart.java 프로젝트: feihugis/NetCDF
  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 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;
  }