Аннотации на графике свечей не работают - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь добавить аннотации к диаграмме.Кажется, что он добавлен, так как 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 Ответ

2 голосов
/ 13 июня 2019

API XYShapeAnnotation говорит:

Координаты формы указаны в пространстве данных.

Координаты вашего Rectangle2D могут не соответствовать вашим фактическим данным. Вместо этого используйте координаты из вашей OHLCDataset, чтобы создать аннотацию. Сосредоточив внимание на втором элементе в series1 в этом примере , приведенная ниже диаграмма иллюстрирует получение данных из базового 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 имеют соответствующие средства доступа.

...