在 TeeChart 中将 AxisBreaks 与蜡烛一起使用 Android
Using AxisBreaks with Candles in TeeChart Android
我正在尝试向 android 中的烛台图表添加轴中断。
加不加轴断点由底层数据决定。
在第一张图片上,您可以看到没有轴中断的正常图表状态。请提及左上角的注释:
在第二张图片上,您可以看到带有轴中断的图表。从图片中可以看出,存在一些问题:
一半的蜡烛隐藏在轴中断线的后面。我怎样才能防止这种重叠?
注意注释的位置:显示位置不正确,角度奇怪!
另请提及第 3 轴中断,它也显示不正确。
任何人都可以建议如何解决所描述的问题吗?
- Halves of the candles are hidden behind the axis break's lines. How
can I prevent this overlapping?
您可以为轴中断 StartValue 和 EndValue 添加一些边距。
- Note the position of the annotation: it's shown at the incorrect position and with the strange angle!
我无法用下面的示例代码重现这一点。
您能否改进您的问题,添加一个简单的示例项目,我们可以 运行 按原样在此处重现该问题?
- 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);
}
}
});
我正在尝试向 android 中的烛台图表添加轴中断。 加不加轴断点由底层数据决定。
在第一张图片上,您可以看到没有轴中断的正常图表状态。请提及左上角的注释:
在第二张图片上,您可以看到带有轴中断的图表。从图片中可以看出,存在一些问题:
一半的蜡烛隐藏在轴中断线的后面。我怎样才能防止这种重叠?
注意注释的位置:显示位置不正确,角度奇怪!
另请提及第 3 轴中断,它也显示不正确。
任何人都可以建议如何解决所描述的问题吗?
- Halves of the candles are hidden behind the axis break's lines. How can I prevent this overlapping?
您可以为轴中断 StartValue 和 EndValue 添加一些边距。
- Note the position of the annotation: it's shown at the incorrect position and with the strange angle!
我无法用下面的示例代码重现这一点。
您能否改进您的问题,添加一个简单的示例项目,我们可以 运行 按原样在此处重现该问题?
- 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);
}
}
});