当前位置: 首页 > 知识库问答 >
问题:

这是可能的,以显示在烛台jfreechart中空蜡烛?

郁鸿博
2023-03-14

大多数财务图表库使用一些规则来为蜡烛着色:

  1. 如果<代码>关闭

jFreeChart似乎有自己的着色规则,可以更改它们。默认情况下,该图表如下所示(某些颜色已更改):

如您所见,可以更改蜡烛、背景、绘图边框等的颜色。

我想在图表中实现规则1和2(上面)。可能吗?

结果应该是这样的:

这是我目前在示例中使用的烛台:

public class CandlestickRenderer extends org.jfree.chart.renderer.xy.CandlestickRenderer {

    public CandlestickRenderer() {
        setDrawVolume(false);
    }

    @Override
    public Paint getItemPaint(int series, int item) {
        OHLCDataset highLowData = (OHLCDataset)getPlot().getDataset(series);
        Number curClose = highLowData.getClose(series, item);
        Number prevClose = highLowData.getClose(series, item>0 ? item-1 : 0);
        if (prevClose.doubleValue() <=  curClose.doubleValue()) {
            return getUpPaint();
        }
        else {
            return getDownPaint();
        }
    }   
}

似乎只需将up paint设置为black并绘制item pant颜色不变即可。

public class CandlestickRenderer extends org.jfree.chart.renderer.xy.CandlestickRenderer {

    public CandlestickRenderer() {
        setDrawVolume(false);
        setUseOutlinePaint(false);
        setUpPaint(Color.BLACK); // <-- rule 1. (plot is also black so it looks not filled)
    }

    @Override
    public Paint getItemPaint(int series, int item) {
        OHLCDataset highLowData = (OHLCDataset) getPlot().getDataset(series);
        Number curClose = highLowData.getClose(series, item);
        Number prevClose = highLowData.getClose(series, item>0 ? item-1 : 0);

        if (prevClose.doubleValue() <=  curClose.doubleValue()) {
            return Color.GREEN; // <-- rule 3.
        } else {
            return Color.RED; // <-- rule 4.
        }
    }

}

但主要问题仍然存在:

>

在jFreeChart的源代码中,我可以在哪里找到upPant的部分?

这就是现在奇怪的结果:

共有1个答案

杜祺
2023-03-14

我做到了。以下是完整的自己的渲染器:

public class CandlestickRenderer extends org.jfree.chart.renderer.xy.CandlestickRenderer {

    private final Paint colorRaising = Color.GREEN;
    private final Paint colorFalling = Color.RED;
    private final Paint colorUnknown = Color.GRAY;
    private final Paint colorTransparent = Color.BLACK;

    public CandlestickRenderer() {
        setDrawVolume(false);
        setUpPaint(colorUnknown); // use unknown color if error
        setDownPaint(colorUnknown); // use unknown color if error
    }


    @Override
    public Paint getItemPaint(int series, int item) {
        OHLCDataset highLowData = (OHLCDataset) getPlot().getDataset(series);
        Number curClose = highLowData.getClose(series, item);
        Number prevClose = highLowData.getClose(series, item>0 ? item-1 : 0);

        if (prevClose.doubleValue() <=  curClose.doubleValue()) {
            return Color.GREEN;
        } else {
            return Color.RED;
        }
    }


    @Override
    public void drawItem(Graphics2D g2, XYItemRendererState state,
            Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot,
            ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset,
            int series, int item, CrosshairState crosshairState, int pass) {

        OHLCDataset highLowData = (OHLCDataset) dataset;
        double yOpen = highLowData.getOpenValue(series, item);
        double yClose = highLowData.getCloseValue(series, item);        

        // set color for filled candle
        if (yClose >= yOpen) {
            setUpPaint(colorRaising);
            setDownPaint(colorFalling);
        }

        // set color for hollow (not filled) candle
        else {
            setUpPaint(colorTransparent);
            setDownPaint(colorTransparent);
        }

        // call parent method
        super.drawItem(g2, state, dataArea, info, plot, domainAxis, rangeAxis, dataset, series, item, crosshairState, pass);
    }   

}

以及由此产生的图表:

如果您需要所有示例代码,请随时与我联系。

 类似资料:
  • 我正在开发一个显示每日财务数据的应用程序,并选择使用JFreeChart。我能够学习如何创建烛台图表,但我的问题在于定制。 你看,我的目标更像是 然而,到目前为止,我所能做的就是 无论我放大多远,烛台的宽度都不会增加。 我相当肯定,不知何故,薄烛台与一定的时间范围有关。。我已经试着去补救,但我不确定我到底做错了什么。

  • 我试图在JFreeChart中生成一个图表,它由叠加的烛台图和Timeseries图组成。(有点像这样) 我曾尝试创建烛台图表,然后添加额外的XY系列和it渲染器,但这导致运行时错误 我的代码片段如下 如有任何意见,将不胜感激

  • 这参考了蜡烛图的JFreeChart渲染。下面是使用JFreeChart生成蜡烛棒图表的代码片段。 这段代码已经过测试,并且已经运行了很长时间。但是,JFreeChart的版本已从1.0.17更改为1.0.19,使用1.0.19生成的烛台图表显示蜡烛对象/线的污迹。当我将库更改回1.0.17时,烛台对象/线再次变得清晰。 下面提供了两个库的图像。 我曾试图找出原因,但至今仍不成功。现在的问题是,由

  • 这是这个问题的后续问题。 发生的情况如下: 当我启动图形并拖动图形时,奇怪的事情发生了:在一定的间隔内,似乎每7个周期,烛台就会越来越小,直到它们变成一条条纹。然后,当我进一步拖动时,它们再次变厚,直到它们再次变为正常大小。这似乎每7个周期发生一次。 这种现象的一个示例显示在以下3张图片上: 下面的代码将准确地显示我的意思。只需编译并运行它。然后按住,用鼠标在图形上单击并按住。现在尝试向右或向左拖

  • 我在MPAndroidChart_GITHUB中使用了3.1.0版本 我试过这个代码 activity_test.xml 首先,更改文件是布局xml activity.java 但这太奇怪了

  • 烛台图表用于显示价值差异的开盘价和收盘价,通常用于表示股票。 在本节中,我们将讨论以下类型的基于烛台的图表。 Sr. No. 图表类型/描述 1 Basic Candlestick 基本烛台图表。 2 Candlestick with customized colors 自定义烛台图表。