2017-07-18 27 views
2

标签我使用JFreeChart的曲线图的一些数据,我已经让该图表显示我的标准误差为每点这样设置它: GraphJFreeChart的设置错误

标签显示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); 

在此先感谢。

回答

2

XYErrorRenderer从抽象父项继承其执行drawItemLabel(),该抽象父项对错误栏一无所知。您需要在自定义渲染器子类中覆盖drawItem()以绘制额外的标签。 的source可以作为指导。

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

image

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; 
    } 
}); 
+0

你可以使用这个工具提示? – trashgod

+0

是的,工具提示是我更喜欢实际做的。我不知道如何做一个自定义的子类,所以我可能只是叫它退出 – Evan

+0

这给我一个错误“线程中的异常”AWT-EventQueue-0“java.lang.ClassCastException:org.jfree.data.xy。 YIntervalSeriesCollection无法转换为org.jfree.data.xy.XYIntervalSeriesCollection“第5行 – Evan