Создайте более толстые свечи в JFreeChart

Я разрабатываю приложение, отображающее ежедневные финансовые данные, и решил использовать JFreeChart. Я смог научиться создавать свечной график, но моя проблема заключается в настройке.

Видите ли, то, к чему я стремлюсь, больше похоже на

это

Хотя до сих пор все, что я мог сделать, это

это.

Как бы я не увеличивал масштаб, свечи не увеличиваются в ширину.

Я почти уверен, что тонкие свечи каким-то образом связаны с определенным временным диапазоном. Я пытался исправить это, но не уверен, что я делаю здесь неправильно.

ССЦЭ

    public void showStockHistory(OHLCDataset dataset, String stockName) {
    JFreeChart candleChart = ChartFactory.createCandlestickChart("History of " + stockName, "Date", "Stock Points", dataset, true);

    XYPlot plot = candleChart.getXYPlot();
        plot.setDomainPannable(true);
        plot.setRangePannable(true);

    ValueAxis domain = plot.getDomainAxis();
        domain.setAutoRange(true);

    NumberAxis range = (NumberAxis)plot.getRangeAxis();
        range.setUpperMargin(0.0D);
        range.setLowerMargin(0.0D);
        range.setAutoRange(true);
        range.setAutoRangeIncludesZero(false);

    ChartPanel chartPanel = new ChartPanel(candleChart);
        chartPanel.setMouseWheelEnabled(true);
        chartPanel.setMouseZoomable(true);

    getViewport().add(chartPanel);
    }

person steelmonkey    schedule 18.09.2015    source источник
comment
Возможный дубликат, связанный с использованием файла SegmentedTimeline.   -  person trashgod    schedule 18.09.2015
comment
@trashgod Я не совсем уверен, связано ли это с этим. В моем случае на графике отображаются только тонкие свечи независимо от движения перетаскивания или глубины масштабирования. Не знаю, что здесь делать... так что, возможно, я попробую поиграться с временными шкалами, чтобы посмотреть, произойдут ли какие-либо изменения...   -  person steelmonkey    schedule 18.09.2015
comment
Перетаскивание просто облегчает просмотр, так как ширина увеличивается и уменьшается. Вы также можете поэкспериментировать с setAutoWidthMethod().   -  person trashgod    schedule 18.09.2015
comment
@trashgod Спасибо. Хотя это не совсем то, что я бы назвал идеальным, установка setAutoWidthMethod() на CandlestickRenderer.WIDTHMETHOD_SMALLEST более или менее подходит, учитывая размер набора данных, который я использую.   -  person steelmonkey    schedule 18.09.2015
comment
Похоже, это не дубликат; Я бы посоветовал вам ответить на свой вопрос.   -  person trashgod    schedule 18.09.2015


Ответы (1)


Хотя в моем примере вызовы методов, похоже, не отличаются от демонстрации в коде первого изображения выше, тем не менее он показывает только тонкие подсвечники. Я предполагаю, что это какой-то баг.

Тем не менее, я смог исправить проблему следующим образом:

  1. получение рендерера для графика,

  2. приведение его к типу CandlestickRenderer и

  3. установив для своего метода setAutoWidthMethod() значение CandlestickRenderer.WIDTHMETHOD_SMALLEST.

Вот как вы это делаете:

JFreeChart candleChart = ChartFactory.createCandlestickChart(
    "History of " + stockName, "Date", "Stock Points", dataset, true);
XYPlot plot = candleChart.getXYPlot();
CandlestickRenderer renderer = (CandlestickRenderer) plot.getRenderer();
renderer.setAutoWidthMethod(CandlestickRenderer.WIDTHMETHOD_SMALLEST);
person steelmonkey    schedule 19.09.2015