JFreeChart为错误设置标签

时间:2017-07-18 19:35:29

标签: java jfreechart

我正在使用JFreeChart来绘制一些数据,我已将其设置为使图表显示每个点的标准误差: Graph

标签显示每个点的Y值,但我也希望能够显示标准误差的Y值。此外,是否有一种方法可以使这些数据只显示在鼠标悬停的情况下?

这是我用来添加错误和标签的代码:

XYErrorRenderer renderer = new XYErrorRenderer();
renderer.setBaseLinesVisible(true);
renderer.setBaseShapesVisible(true);
renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator("{2}",
    NumberFormat.getNumberInstance(),NumberFormat.getNumberInstance()));
renderer.setBaseItemLabelsVisible(true);
chart.getXYPlot().setRenderer(renderer);

提前致谢。

1 个答案:

答案 0 :(得分:2)

XYErrorRenderer从抽象父级继承其drawItemLabel()的实现,它对错误栏一无所知。您需要在自定义渲染器子类中覆盖drawItem()以绘制额外标签。 drawItemLabel()的{​​{3}}可以作为指南。

附录:一个不太雄心勃勃的替代方案是在工具提示中显示误差范围。下面的自定义source指定自定义格式字符串,并覆盖createItemArray()以提供数据集中的相关 y 值。由于XYDatasetYIntervalSeriesCollection,您可以按如下所示进行投射。

StandardXYToolTipGenerator

renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
        "{0}: {1}…{2}", NumberFormat.getInstance(), NumberFormat.getInstance()) {
    @Override
    protected Object[] createItemArray(XYDataset data, int series, int item) {
        YIntervalSeriesCollection d = (YIntervalSeriesCollection) data;
        Object[] result = new Object[3];
        double y = d.getYValue(series, item);
        result[0] = getYFormat().format(y);
        double min = d.getStartYValue(series, item);
        result[1] = getYFormat().format(min);
        double max = d.getEndYValue(series, item);
        result[2] = getYFormat().format(max);
        return result;
    }
});