在 TeeChart 中将 AxisBreaks 与蜡烛一起使用 Android

Using AxisBreaks with Candles in TeeChart Android

我正在尝试向 android 中的烛台图表添加轴中断。 加不加轴断点由底层数据决定。

在第一张图片上,您可以看到没有轴中断的正常图表状态。请提及左上角的注释:

在第二张图片上,您可以看到带有轴中断的图表。从图片中可以看出,存在一些问题:

  1. 一半的蜡烛隐藏在轴中断线的后面。我怎样才能防止这种重叠?

  2. 注意注释的位置:显示位置不正确,角度奇怪!

  3. 另请提及第 3 轴中断,它也显示不正确。

任何人都可以建议如何解决所描述的问题吗?

  1. Halves of the candles are hidden behind the axis break's lines. How can I prevent this overlapping?

您可以为轴中断 StartValue 和 EndValue 添加一些边距。

  1. Note the position of the annotation: it's shown at the incorrect position and with the strange angle!

我无法用下面的示例代码重现这一点。
您能否改进您的问题,添加一个简单的示例项目,我们可以 运行 按原样在此处重现该问题?

  1. Also please mention the 3rd axis break, it's shown incorrectly, too.

我可以看到在图表中间绘制了一个额外的轴中断,类似于您图片中的轴中断。但是,我只能用评估版重现这个问题,不能用注册版(ID1078)。
我假设它与我们在图表中间绘制的 "EVALUATION VERSION" 倾斜水印有关。

这是我使用的代码:

    tChart1.getAspect().setView3D(false);
    tChart1.getLegend().setVisible(false);

    Candle candle1 = new Candle(tChart1.getChart());

    candle1.fillSampleValues(80);

    DateTime dt = DateTime.getNow();
    for (int i = 0; i < candle1.getCount(); i++) {
        candle1.getXValues().setValue(i, dt.toDouble());
        dt.add(Calendar.MINUTE, 1);            
    }

    //tChart1.getAxes().getBottom().setIncrement(DateTimeStep.FIVEMINUTES);
    tChart1.getAxes().getBottom().getLabels().setDateTimeFormat("hh:mm");

    AxisBreaksTool axisBreaksTool1 = new AxisBreaksTool(tChart1.getAxes().getBottom());

    for (int i=0; i<3; i++) {
        AxisBreak axisBreak1 = new AxisBreak(axisBreaksTool1);
        axisBreak1.setStartValue(candle1.getXValues().getValue(10*(i+1))-0.6);
        axisBreak1.setEndValue(candle1.getXValues().getValue(10*(i+1)+5)+0.6);
        axisBreak1.setStyle(AxisBreakStyle.LINE);
        axisBreaksTool1.getBreaks().add(axisBreak1);
    }

    Annotation annotation1 = new Annotation(tChart1.getChart());
    annotation1.setText("My Text");
    annotation1.setLeft(10);
    annotation1.setTop(10);

Annotation 工具和 AxisBreaksTool 似乎有冲突:我一添加轴中断,注释就消失了 (ID1077)。


编辑:

如果您希望轴 Breaks StartValue 和 EndValue 取决于 CandleWidth,您可以以轴为单位计算蜡烛宽度的大小,但您需要绘制图表才能执行此操作。
以下是如何使用 ChartPaintListener 以底部轴为单位计算 CandleWidth 并将其用作 AxisBreaks 的额外边距:

    tChart1.addChartPaintListener(new ChartPaintAdapter() {

        @Override
        public void chartPainted(ChartDrawEvent e) {
            Candle candle1 = (Candle)tChart1.getSeries(0);
            double onePxWidth = tChart1.getAxes().getBottom().calcPosPoint(1) - tChart1.getAxes().getBottom().calcPosPoint(0); 
            double tmpWidthLeft = onePxWidth*(candle1.getCandleWidth()/2 + 4);
            double tmpWidthRight = onePxWidth*(candle1.getCandleWidth()/2 + 3);

            AxisBreaksTool axisBreaksTool1 = (AxisBreaksTool)tChart1.getTools().getTool(0);
            for (int i=0; i<axisBreaksTool1.getBreaks().size(); i++) {
                AxisBreak axisBreak1 = axisBreaksTool1.getBreaks().get(i);
                axisBreak1.setStartValue(candle1.getXValues().getValue(10*(i+1))+tmpWidthLeft);
                axisBreak1.setEndValue(candle1.getXValues().getValue(10*(i+1)+5)-tmpWidthRight);
            }
        }
    });