/** * Returns a sample dataset. * * @return The dataset. */ private CategoryDataset createDataset() { // row keys... String series1 = "First"; String series2 = "Second"; String series3 = "Third"; // column keys... String category1 = "Category 1"; String category2 = "Category 2"; String category3 = "Category 3"; String category4 = "Category 4"; String category5 = "Category 5"; // create the dataset... DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1.0, series1, category1); dataset.addValue(4.0, series1, category2); dataset.addValue(3.0, series1, category3); dataset.addValue(5.0, series1, category4); dataset.addValue(5.0, series1, category5); dataset.addValue(5.0, series2, category1); dataset.addValue(7.0, series2, category2); dataset.addValue(6.0, series2, category3); dataset.addValue(8.0, series2, category4); dataset.addValue(4.0, series2, category5); dataset.addValue(4.0, series3, category1); dataset.addValue(3.0, series3, category2); dataset.addValue(2.0, series3, category3); dataset.addValue(3.0, series3, category4); dataset.addValue(6.0, series3, category5); return dataset; }
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; }
/** 与えられたXMLドキュメントより、"Dataset"オブジェクトの配列(ArrayList)を取得する */ private ArrayList<Dataset> getDatasetList(Document doc) { ArrayList<Dataset> dataSetList = new ArrayList<Dataset>(); Element root = doc.getDocumentElement(); Element chartInfo = (Element) root.getElementsByTagName("ChartInfo").item(0); NodeList dataSetNodeList = root.getElementsByTagName("DataSet"); Dataset dataset = null; // XMLの"DataSetList"要素内にある"DataSet"要素の数だけまわる for (int i = 0; i < dataSetNodeList.getLength(); i++) { Element firstDataSet = (Element) dataSetNodeList.item(i); NodeList dataList = firstDataSet.getElementsByTagName("Data"); // データセットの初期化(円チャート、3D円チャート) if ((this.chartType.equals("Pie")) || (this.chartType.equals("Pie_3D"))) { dataset = new DefaultPieDataset(); // データセットの初期化(それ以外のチャート(線、棒、面、および複数Seriesを持つ円チャート)) } else { // 複数円チャートの場合は、XMLにある複数の"DataSet"要素内の"Data"要素を、一つのJava "Dataset"オブジェクトに // 格納するため、datasetの新規作成処理を行なわない // 複数線、棒、面チャートの場合は、XMLの"DataSet"毎に Java "Dataset"オブジェクトを一つ生成する if ((!this.chartType.equals("MultiPie")) || (i == 0)) { dataset = new DefaultCategoryDataset(); } } // XMLの"DataSet"要素(一つ外側のforループで選択されているもの)内にある"Data"要素の数だけまわる for (int j = 0; j < dataList.getLength(); j++) { Element data = (Element) dataList.item(j); Number value = new Double(data.getElementsByTagName("Value").item(0).getFirstChild().getNodeValue()); String categoryAxisName = categoryAxisName = data.getElementsByTagName("CategoryAxisName") .item(0) .getFirstChild() .getNodeValue(); String seriesAxisName = null; // 円チャート、3D円チャート if ((this.chartType.equals("Pie")) || (this.chartType.equals("Pie_3D"))) { ((DefaultPieDataset) dataset).setValue(categoryAxisName, value); // それ以外のチャート(線、棒、面チャート(Series数に関わらない)および、複数Seriesを持つ円チャート) } else { if (data.getElementsByTagName("ValueAxisName").item(0).getFirstChild() != null) { seriesAxisName = data.getElementsByTagName("ValueAxisName").item(0).getFirstChild().getNodeValue(); } ((DefaultCategoryDataset) dataset).addValue(value, seriesAxisName, categoryAxisName); } } // 複数円チャートの場合は、XMLにある複数の"DataSet"要素内の"Data"要素を、一つのJava "Dataset"オブジェクトに // 格納するため、datasetのdataSetListへの登録は全データをデータセットに登録後の一度のみ行なう。 if ((!this.chartType.equals("MultiPie")) || (i == (dataSetNodeList.getLength() - 1))) { dataSetList.add(dataset); } } return dataSetList; }