예제 #1
0
파일: Chart.java 프로젝트: feihugis/NetCDF
  public Chart(String filename) {
    try {
      // Get Stock Symbol
      this.stockSymbol = filename.substring(0, filename.indexOf('.'));

      // Create time series
      TimeSeries open = new TimeSeries("Open Price", Day.class);
      TimeSeries close = new TimeSeries("Close Price", Day.class);
      TimeSeries high = new TimeSeries("High", Day.class);
      TimeSeries low = new TimeSeries("Low", Day.class);
      TimeSeries volume = new TimeSeries("Volume", Day.class);

      BufferedReader br = new BufferedReader(new FileReader(filename));
      String key = br.readLine();
      String line = br.readLine();
      while (line != null && !line.startsWith("<!--")) {
        StringTokenizer st = new StringTokenizer(line, ",", false);
        Day day = getDay(st.nextToken());
        double openValue = Double.parseDouble(st.nextToken());
        double highValue = Double.parseDouble(st.nextToken());
        double lowValue = Double.parseDouble(st.nextToken());
        double closeValue = Double.parseDouble(st.nextToken());
        long volumeValue = Long.parseLong(st.nextToken());

        // Add this value to our series'
        open.add(day, openValue);
        close.add(day, closeValue);
        high.add(day, highValue);
        low.add(day, lowValue);

        // Read the next day
        line = br.readLine();
      }

      // Build the datasets
      dataset.addSeries(open);
      dataset.addSeries(close);
      dataset.addSeries(low);
      dataset.addSeries(high);
      datasetOpenClose.addSeries(open);
      datasetOpenClose.addSeries(close);
      datasetHighLow.addSeries(high);
      datasetHighLow.addSeries(low);

      JFreeChart summaryChart = buildChart(dataset, "Summary", true);
      JFreeChart openCloseChart = buildChart(datasetOpenClose, "Open/Close Data", false);
      JFreeChart highLowChart = buildChart(datasetHighLow, "High/Low Data", true);
      JFreeChart highLowDifChart =
          buildDifferenceChart(datasetHighLow, "High/Low Difference Chart");

      // Create this panel
      this.setLayout(new GridLayout(2, 2));
      this.add(new ChartPanel(summaryChart));
      this.add(new ChartPanel(openCloseChart));
      this.add(new ChartPanel(highLowChart));
      this.add(new ChartPanel(highLowDifChart));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
예제 #2
0
파일: Chart.java 프로젝트: feihugis/NetCDF
  public Chart(String title, String timeAxis, String valueAxis, TimeSeries data) {
    try {
      // Build the datasets
      dataset.addSeries(data);

      // Create the chart
      JFreeChart chart =
          ChartFactory.createTimeSeriesChart(
              title, timeAxis, valueAxis, dataset, true, true, false);

      // Setup the appearance of the chart
      chart.setBackgroundPaint(Color.white);
      XYPlot plot = chart.getXYPlot();
      plot.setBackgroundPaint(Color.lightGray);
      plot.setDomainGridlinePaint(Color.white);
      plot.setRangeGridlinePaint(Color.white);
      plot.setAxisOffset(new RectangleInsets(UnitType.ABSOLUTE, 5.0, 5.0, 5.0, 5.0));
      plot.setDomainCrosshairVisible(true);
      plot.setRangeCrosshairVisible(true);

      // Tell the chart how we would like dates to read
      DateAxis axis = (DateAxis) plot.getDomainAxis();
      axis.setDateFormatOverride(new SimpleDateFormat("EEE HH"));

      this.add(new ChartPanel(chart));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public String generatePieChart(
      String hitOrdNum, 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 whDataSet =
          new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId);
      ArrayList list = whDataSet.getDataBySection(hitOrdNum);

      //  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 PieDataSet
      DefaultPieDataset data = new DefaultPieDataset();
      Iterator iter = list.listIterator();
      while (iter.hasNext()) {
        StudentsConceptHit wh = (StudentsConceptHit) iter.next();
        data.setValue(wh.getSection(), wh.getHitDegree());
      }

      //  Create the chart object
      PiePlot plot = new PiePlot(data);
      plot.setInsets(new Insets(0, 5, 5, 5));
      plot.setURLGenerator(new StandardPieURLGenerator("xy_chart.jsp", "section"));
      plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
      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;
  }
예제 #4
0
파일: Chart.java 프로젝트: feihugis/NetCDF
  protected Day getDay(String date) {
    try {
      String[] st = date.split("-");
      int year = Integer.parseInt(st[0]);
      int month = Integer.parseInt(st[1]);
      int day = Integer.parseInt(st[2]);

      // Build a new Day
      return new Day(day, month, year);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  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 generateXYAreaChart(
      HttpSession session, PrintWriter pw, String courseId, int studentId) {
    String filename = null;
    /* int groupId=0;
    if (groupName.equals("All")){
        groupId=0;
    }else{
         groupId = studStatisticBean.getGroupIdByName(groupName);
    }*/

    try {
      //  Retrieve list of WebHits for each section and populate a TableXYDataset
      StudentsConceptChartDataSet cDataSet =
          new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId);
      // cDataSet.setStudentStatisticBeanIdRef(studStatisticBean);
      ArrayList sections = cDataSet.getSections();
      Iterator sectionIter = sections.iterator();
      DefaultTableXYDataset dataset = new DefaultTableXYDataset();
      while (sectionIter.hasNext()) {
        String section = (String) sectionIter.next();
        ArrayList list = cDataSet.getDataByHitConcept(section);
        XYSeries dataSeries = new XYSeries(section, true, false);
        Iterator webHitIter = list.iterator();
        while (webHitIter.hasNext()) {
          StudentsConceptHit cHit = (StudentsConceptHit) webHitIter.next();
          dataSeries.add(cHit.getOrdNumb(), cHit.getHitDegree());
        }
        dataset.addSeries(dataSeries);
      }

      //  Throw a custom NoDataException if there is no data
      if (dataset.getItemCount() == 0) {
        System.out.println("No data has been found");
        throw new NoDataException();
      }

      //  Create tooltip and URL generators
      SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.UK);
      StandardXYToolTipGenerator ttg =
          new StandardXYToolTipGenerator(
              StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, sdf, NumberFormat.getInstance());
      TimeSeriesURLGenerator urlg =
          new TimeSeriesURLGenerator(sdf, "bar_chart.jsp", "series", "hitDate");

      //  Create the X-Axis
      DateAxis xAxis = new DateAxis(null);
      xAxis.setLowerMargin(0.0);
      xAxis.setUpperMargin(0.0);

      //  Create the X-Axis
      NumberAxis yAxis = new NumberAxis(null);
      yAxis.setAutoRangeIncludesZero(true);

      //  Create the renderer
      StackedXYAreaRenderer renderer =
          new StackedXYAreaRenderer(XYAreaRenderer.AREA_AND_SHAPES, ttg, urlg);
      renderer.setSeriesPaint(0, new Color(255, 255, 180));
      renderer.setSeriesPaint(1, new Color(206, 230, 255));
      renderer.setSeriesPaint(2, new Color(255, 230, 230));
      renderer.setSeriesPaint(3, new Color(206, 255, 206));
      renderer.setShapePaint(Color.gray);
      renderer.setShapeStroke(new BasicStroke(0.5f));
      renderer.setShape(new Ellipse2D.Double(-3, -3, 6, 6));
      renderer.setOutline(true);

      //  Create the plot
      XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
      plot.setForegroundAlpha(0.65f);

      //  Reconfigure Y-Axis so the auto-range knows that the data is stacked
      yAxis.configure();

      //  Create the chart
      JFreeChart chart = new JFreeChart(null, 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;
  }