在 JFreeChart 中创建更胖的烛台

Create Fatter Candlesticks in JFreeChart

我正在开发一个显示每日财务数据的应用程序,并选择使用 JFreeChart。我能够学习如何创建烛台图表,但我的问题在于自定义。

你看,我的目标更符合

而到目前为止,我所能做到的只是

.

无论我放大多远,烛台的宽度都没有增加。

我相当确定细烛台在某种程度上与特定时间范围的绑定有关。我已经尝试补救,但不确定我在这里做错了什么。

SSCE

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

虽然我给出的示例似乎与上面第一张图片代码中的 demo 没有不同的方法调用,但它只显示细烛条。我认为这是某种错误。

但是,我能够按如下方式纠正问题:

  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);