创建jfreechart分数栏/图表时出现的问题

时间:2018-07-26 13:08:33

标签: java pdf jfreechart

我正在尝试使用jfreechart创建一个得分/百分比/状态栏。 该图像显示了它的外观。Good ScoreChart

它看起来像堆栈图中的一个柱线,因此我尝试从那里进行调整。 (请告诉我,除了堆栈图以外,还有其他更好的方法)

我看到以这种方式处理栏的问题很多。我不能将起始行和结束行加长。我不能在开始/结束行的两边都放文本。(我认为它们被切掉了)我也不能在栏的中间放中间文本... 这就是我现在得到的。 Bad ScoreChart

这是不良图表的代码。

public JFreeChart createChart(final CategoryDataset dataset) {

    final JFreeChart chart = ChartFactory.createStackedBarChart(null, null, null, dataset,
        PlotOrientation.HORIZONTAL, false, false, false);

    chart.setBackgroundPaint(Color.WHITE);

    CategoryPlot plot = chart.getCategoryPlot();
    ((BarRenderer) plot.getRenderer()).setBarPainter(new StandardBarPainter());
    plot.getRenderer().setSeriesPaint(0, DONUT_CHART_ORANGE);
    plot.getRenderer().setSeriesPaint(1, DONUT_CHART_BLUE);


    ValueAxis rangeAxis = plot.getRangeAxis();
    rangeAxis.setVisible(false);

    CategoryAxis domainAxis = plot.getDomainAxis();

    domainAxis.setVisible(false);
    plot.setRangeGridlinesVisible(false);
    plot.setBackgroundPaint(Color.WHITE);
    plot.setOutlineVisible(false);

    CategoryItemRenderer renderer = ((CategoryPlot) chart.getPlot()).getRenderer();    
    //renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer.setBaseItemLabelGenerator(new CustomItemLabelGenerator());    
    renderer.setBaseItemLabelsVisible(true);
    ItemLabelPosition position = new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER);
    renderer.setBasePositiveItemLabelPosition(position);

    Marker startMarker = new ValueMarker(0);
    startMarker.setPaint(Color.black);
    startMarker.setLabel("000000000");
    startMarker.setStroke(new BasicStroke(1.0f));

    startMarker.setLabelOffset( new RectangleInsets(UnitType.ABSOLUTE, 10,0,0,0));
    startMarker.setLabelAnchor(RectangleAnchor.TOP_RIGHT) ;
    startMarker.setLabelTextAnchor(TextAnchor.BASELINE_CENTER);     

    plot.addRangeMarker(startMarker);        

    Marker endMarker = new ValueMarker(1000);
    endMarker.setPaint(Color.black);
    endMarker.setLabel("1000");
    endMarker.setStroke(new BasicStroke(1.0f));
    endMarker.setLabelAnchor(RectangleAnchor.TOP);
    endMarker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);     
    plot.addRangeMarker(endMarker);     

    RectangleInsets chartRectangle = new RectangleInsets(35, 0, 35, 0);
    chart.setPadding(chartRectangle);

    return chart;
}


public CategoryDataset createDataset() {
    double inValue = 775;
    double[][] data = new double[][] {
        { inValue }, 
        { 1000- inValue }, 
    };
    return DatasetUtilities.createCategoryDataset("A", "B", data);
}

任何想法如何移动文本,使它们显示在线条的顶部和栏的中心? 我们可以在起点和终点调整线宽吗?

感谢任何想法/信息。

0 个答案:

没有答案