0

アクセス レコードをリストする DB のテーブルから読み取る棒グラフを作成する必要があります。

表には、アクセスしたベンダー (X 軸)、誰に代わってアクセスしたか (各バー)、および回数 (Y 軸) が表示されます。

各ベンダーは複数の自治体に代わってアクセスできますが、各自治体にはベンダーが 1 つしかありません。そのため、各ベンダーはおそらく複数のバーを表示します.... ただし、チャートのすべてのバーは一意であり、ベンダーごとにグループ化されています.

jfreechart の例では、x 軸の各カテゴリが繰り返し系列を使用している場所を確認していますが、各バーが一意である場合に必要なことをどのように行うのですか?

関連するサーブレット コードは次のとおりです。

                           //Municipality, Vendor                                                    //for month of January                           //Vendor  //Municipality                                                 
        if (stmt.execute("Select COUNT(accessFor), accessBy, accessFor FROM bps_bam.access WHERE DATE_FORMAT(accessTime, '%Y %M') = '2012 January' GROUP BY accessBy, accessFor;")) {
            rs = stmt.getResultSet();
        } else {
            System.err.println("select failed");
        }

        DefaultCategoryDataset dataset = new DefaultCategoryDataset(); //Set of values for Bar Graph

        while(rs.next())
        {                    //count           //municipality          //vendor
            dataset.addValue(rs.getDouble(1), rs.getString(3), (String)rs.getString(2));
        }

        counter++;

        JFreeChart chart = ChartFactory.createBarChart(
                "January Access Times", // chart title
                "Vendor", // domain axis label
                "Value", // range axis label
                dataset, // data
                PlotOrientation.VERTICAL, // orientation
                false, // include legend
                false, // tooltips
                false // URLs?
                );



        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        CategoryItemRenderer renderer = plot.getRenderer();
        CategoryItemLabelGenerator generator
            = new StandardCategoryItemLabelGenerator("{0}",
                    NumberFormat.getInstance());
        renderer.setBaseItemLabelGenerator(generator);
        renderer.setBaseItemLabelFont(new Font("SansSerif", Font.PLAIN, 12));
        renderer.setBaseItemLabelsVisible(true);
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
                ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));


        response.setContentType("image/png");
        //response.addHeader("Refresh", "5");

        //Write numbers on range axis just as integrals, not decimals
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 

        ChartUtilities.writeChartAsPNG(out, chart, 800, 500);
4

1 に答える 1

2

これはあなたがやろうとしていることですか?

ここに画像の説明を入力

private static CategoryDataset createDataset() {

    // row keys...
    String series1 = "Municipality 1";
    String series2 = "Municipality 2";
    String series3 = "Municipality 3";

    // column keys...
    String category1 = "Vendor 1";
    String category2 = "Vendor 2";
    String category3 = "Vendor 3";
    String category4 = "Vendor 4";
    String category5 = "Vendor 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(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(3.0, series3, category4);
    dataset.addValue(6.0, series3, category5);

    return dataset;

}
于 2013-04-02T13:58:47.950 に答える