繁体   English   中英

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

[英]how to set first and last tick mark and x axis value in jfree bar chart x-axis

即时通讯在我的应用程序中使用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();
        }

对于上面的代码我正在

在此处输入图片说明

但是我的期望

在此处输入图片说明

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

如果我理解正确,则只希望显示两个刻度(0和1500),并在两个刻度上添加一个明显的内部刻度。

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

要在内部添加刻度线,可以调用setTickMarkInsideLength

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM