Java jfreechart条形图输出

Java jfreechart条形图输出,java,charts,jfreechart,series,Java,Charts,Jfreechart,Series,我需要创建一个条形图,从数据库中列出访问记录的表中读取数据 该表应显示哪个供应商访问了它(X轴),代表谁访问了它(每个条),以及访问了多少次(Y轴) 每个供应商可以代表多个市政当局访问,但每个市政当局只有一个供应商。因此,每个供应商可能会显示多个条形图。。。。但是,图表中的每个条形图都是唯一的,并按供应商分组 在jfreechart示例中,我看到x轴上的每个类别都使用了一个重复序列,但是在每个条都是唯一的情况下,如何满足我的需要呢 以下是相关的servlet代码:

我需要创建一个条形图,从数据库中列出访问记录的表中读取数据

该表应显示哪个供应商访问了它(X轴),代表谁访问了它(每个条),以及访问了多少次(Y轴)

每个供应商可以代表多个市政当局访问,但每个市政当局只有一个供应商。因此,每个供应商可能会显示多个条形图。。。。但是,图表中的每个条形图都是唯一的,并按供应商分组

在jfreechart示例中,我看到x轴上的每个类别都使用了一个重复序列,但是在每个条都是唯一的情况下,如何满足我的需要呢

以下是相关的servlet代码:

                           //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);

这就是你想做的吗

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;

}


谢谢你,格雷厄姆,但不是:)每个城市都应该在图表中显示一次,因为每个城市只有一个供应商。事实上,每个城市可以是相同的颜色,因为没有一个城市会在图表上显示两次。我只需要在X轴上按供应商将它们分开。@Moe45673在这种情况下,您可以模拟一个图表,因为我无法想象您正在尝试做什么。Hmmmmm。。。。。嗯,在显示的图表中有13个条形图。想象一下,所有的酒吧都是相同的颜色,市政当局被命名为“市政当局1”到“市政当局13”,并为这个模型随机分配到酒吧。这就是我想要达到的效果(很明显,真实数据不会是随机的)。这有帮助吗?我还想补充一点,真正的图表将有大约400个城市和大约20个城市vendors@Moe45673我知道你的问题是什么;如果你使用系列,你会得到很多的差距,或者如果你使用一个系列,你会有一个问题,为什么供应商提供多个城市。在这种情况下,我可以看到三个选项(1)对供应商和市政当局进行散列(2)使用堆叠条形图(3)按照说明修改
barnderer