烛台图上的注释不起作用

时间:2019-06-13 11:03:45

标签: java jfreechart

我正在尝试向图表添加注释。似乎已添加,因为如果再添加一个,则图的注释列表的size()也会增加。问题是它没有显示。

OHLCDataset candles = createCandleDataset();

// Create chart
chart = ChartFactory.createCandlestickChart(
    "mychart", "", "", candles, true);

XYPlot plot = (XYPlot) chart.getPlot();        

XYShapeAnnotation a1 = new XYShapeAnnotation(
    new Rectangle2D.Double(10.0, 20.0, 20.0, 30.0),
    new BasicStroke(1.0f), Color.blue);
plot.addAnnotation(a1);

ChartPanel panel = new ChartPanel(chart);
setContentPane(panel);

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

XYShapeAnnotation API说:

  

形状坐标在数据空间中指定。

您的Rectangle2D的坐标可能相对于您的实际数据不明显。相反,请使用OHLCDataset中的坐标来构建注释。下面的图表重点介绍了exampleseries1中第二个项目,下面的图表说明了从基础OHLCSeries检索数据以创建一个周期宽且跨越高/低值的注释。

// series
addSeries1();
OHLCSeries series = seriesCollection.getSeries(0);
OHLCItem item = (OHLCItem) series.getDataItem(1);
RegularTimePeriod t = item.getPeriod();
long x = t.getFirstMillisecond();
long w = t.getLastMillisecond() - t.getFirstMillisecond(); 
double y = item.getLowValue();
double h = item.getHighValue() - y;
XYShapeAnnotation a1 = new XYShapeAnnotation(
    new Rectangle2D.Double(x, y, w, h),
    new BasicStroke(1f), Color.blue
);
chart.getXYPlot().addAnnotation(a1);

image

OHLCDataset的其他实现具有相应的访问器。