3

当我在 Eclipse RCP 插件中的视图上使用 Jfreechart 显示条形图时,条形图标题、域轴名称、范围轴名称在条形图上不可见。

在视图上显示条形图的代码

            final CategoryDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);

            final ChartComposite frame = new    ChartComposite(barchartComposite,SWT.NONE,chart,true);
            frame.setLayoutData(new GridData(GridData.FILL_BOTH));
            frame.pack();
            frame.setVisible(true);
            frame.setChart(chart);
            frame.forceRedraw();
            barchartComposite.getLayout();


 private CategoryDataset createDataset() {

    // row keys...
    final String series1 = "First";


    // column keys...
    final String category1 = "error";
    final String category2 = "info";
    final String category3 = "warning";
    final String category4 = "critical";


    // create the dataset...
    final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.addValue(10, series1, category1);
    dataset.addValue(5, series1, category2);
    dataset.addValue(6, series1, category3);
    dataset.addValue(9, series1, category4);


    return dataset;

}

  private JFreeChart createChart(final CategoryDataset dataset) {

    // create the chart...
    final JFreeChart chart = ChartFactory.createBarChart(
        "Priority BarChart",         // chart title
        "priority",               // domain axis label
        "Value",                  // range axis label
        dataset,                  // data
        PlotOrientation.VERTICAL, // orientation
        true,                     // include legend
        true,                     // tooltips?
        false                     // URLs?
    );

    // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

    // set the background color for the chart...
    chart.setBackgroundPaint(Color.white);

    // get a reference to the plot for further customisation...
    final CategoryPlot plot = chart.getCategoryPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);

    // set the range axis to display integers only...
    final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

    // disable bar outlines...
    final BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setDrawBarOutline(false);

    // set up gradient paints for series...
    final GradientPaint gp0 = new GradientPaint(
        0.0f, 0.0f, Color.blue, 
        0.0f, 0.0f, Color.lightGray
    );

    renderer.setSeriesPaint(0, gp0);


    final CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
    );
    // OPTIONAL CUSTOMISATION COMPLETED.

    return chart;

}   

上面的代码在 Eclipse RCP 插件中的视图上创建了一个条形图。createdataset() 方法为图表生成数据 createChart() 方法生成图表

4

1 回答 1

1

我用 重现了错误jfreechart-1.0.14。这似乎是ChartComposite1.0.14 版本中的一个错误。

解决方案

您可以使用jfreechart-1.0.13的库。我已经使用您问题中的代码对其进行了测试,并且可以正常工作。

jfreechart bug tracker中也有一个条目。

引用:

补丁 3506228 中对此进行了修复。该修复将包含在即将发布的 1.0.15 版本中。

于 2012-11-07T18:29:15.743 回答