【问题标题】:jfreechart bar chart outputjfreechart条形图输出
【发布时间】:2013-03-28 16:13:17
【问题描述】:

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

表格应显示访问它的供应商(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);

【问题讨论】:

    标签: java charts jfreechart series


    【解决方案1】:

    这是你想要做的吗?

    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;
    
    }
    

    【讨论】:

    • 谢谢 Graham,但没有 :) 每个自治市应该在图表中显示一次,因为每个自治市只有一个供应商。事实上,每个自治市都可以是相同的颜色,因为没有一个会在图表上出现两次。我只需要在 X 轴上按供应商拆分它们。
    • @Moe45673 在这种情况下,您可以模拟一个图表,因为我无法想象您要做什么。
    • 嗯嗯.....好吧,您显示的图表中有 13 个条形图。想象一下,所有的酒吧都是相同的颜色,并且市政当局被命名为“Municipality 1”到“Municipality 13”,并且对于这个模型,随机分配给这些酒吧。这就是我想要实现的外观(显然真实数据不会是随机的)。这有帮助吗?
    • 我还想补充一点,真实的图表将有大约 400 个城市和大约 20 个供应商
    • @Moe45673 我明白你的问题是什么;如果你使用系列,你会得到很多空白,或者如果你使用单个系列,你会遇到供应商的问题,为什么要供应多个城市。在这种情况下,我可以看到三个选项(1)散列供应商和市政当局(2)使用堆积条形图(3)修改BarRenderer,如here所述
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多