如何在jfree条形图x轴中设置第一个和最后一个刻度线和x轴值

时间:2013-11-28 07:22:27

标签: java jfreechart

我在我的应用程序中使用jfree图表。对于我的应用程序,我只需要标记x轴的第一个和最后一个值以及刻度标记。 我试过了

String Male1 = "First";
        String Male2 = "sec";
        String Female1 = "0-4";
        String Female2 = "5-18";
        String Female3 = "19-45";
        String Female4 = "46-64";
        String Female5 = "65+";
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(202, Male1, Female1);
        dataset.addValue(130, Male2, Female1);
        dataset.addValue(216, Male1, Female2);
        dataset.addValue(0, Male2, Female2);
        dataset.addValue(248, Male1, Female3);
        dataset.addValue(458, Male2, Female3);
        dataset.addValue(517, Male1, Female4);
        dataset.addValue(623, Male2, Female4);
        dataset.addValue(1481, Male1, Female5);
        dataset.addValue(680, Male2, Female5);        
        final JFreeChart chart = ChartFactory.createBarChart(
                "", "", "", dataset,
                PlotOrientation.HORIZONTAL, true, true, false);
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setOutlineVisible(false);
        plot.setRangeGridlinesVisible(false);
        plot.setRangeGridlineStroke(new BasicStroke(0.2f));
        plot.setAxisOffset(RectangleInsets.ZERO_INSETS);        

        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setAxisLinePaint(Color.decode("#C1C1C1"));
        rangeAxis.setAxisLineVisible(true);
        rangeAxis.setTickMarksVisible(false);
        rangeAxis.setTickMarkOutsideLength(0f);

        final CategoryAxis categoryAxis = (CategoryAxis) plot.getDomainAxis();
        categoryAxis.setTickMarksVisible(false);
        categoryAxis.setAxisLineVisible(false);
        BarRenderer br = new BarRenderer();
        br.setItemMargin(0.03);
        br.setShadowVisible(false);
        br.setBarPainter(new StandardBarPainter());
        br.setSeriesPaint(0, Color.decode("#999999"));
        br.setSeriesPaint(1, Color.decode("#CCCCCC"));        

        chart.getCategoryPlot().setRenderer(br);
        chart.removeLegend();
        try {
            ChartUtilities.saveChartAsPNG(new File("/media/hari/668ea9a3-d26c-4896-a2f0-756dfb532756/jfreeBarchart.png"), chart, 280, 180);
            System.out.println("=====Bar chart=====");
        } catch (Exception e) {
            e.printStackTrace();
        }

对于上面的代码我获取

enter image description here

但我的期望

enter image description here

请帮助我在jfree条形图中获得预期的图表

1 个答案:

答案 0 :(得分:0)

如果我理解正确你想要只显示两个刻度(0和1500)并在两者中添加一个明显的内部刻度线。

要仅显示两个刻度,您可以使用适当的大小参数调用setTickUnit。轴对象将使用此大小生成可见的刻度。

要在内部添加刻度线,您可以拨打setTickMarkInsideLength

因此,添加这三行应该可以解决问题:

rangeAxis.setTickUnit(new NumberTickUnit(1500));
rangeAxis.setTickMarksVisible(true); 
rangeAxis.setTickMarkInsideLength(3f);