- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 TeeChart 中显示底部轴的轴标签时遇到问题。在我的例子中,轴标签相当长,并且以 dd.MM.yyyy 格式表示日期
在某些情况下,当标签彼此靠近放置时,它们会显示为一个在另一个之上(发生重叠)。我为每 N 个值手动向轴添加标签。我可以采取什么措施来防止重叠?
第二个问题是第一个标签的部分有时会显示在图表的左边界之外。因此,例如11.02.2015 用户只能看到标签的一部分,例如2.2015 等。我如何在代码中检测到此类情况?
我尝试使用 AxisLabelResolver
在我的图表中,但我遇到了 AxisLabelResolver
的问题的方法未被调用。可能是什么原因?
最佳答案
使用自定义标签,您可以控制在什么条件下应该或不应该绘制标签。重叠和部分绘制在图表矩形之外的标签是需要控制的常见情况的示例,但我们更愿意在此类自定义工具中将此责任交给开发人员。
您可以使用它来了解字符串的大小:
int tmpWidth = tChart1.getGraphics3D().textWidth(myLabel);
您可以通过以下方式获取由轴定义的矩形:
Rectangle tmpChartRect = tChart1.getChart().getChartRect();
您可以使用以下方法计算轴值的位置(以像素为单位):
int tmpX = tChart1.getAxes().getBottom().calcPosValue(myXValue);
因此,您可以在添加下一个之前循环自定义标签列表。即:
private void addXCustomLabel(double myXValue, String myLabel) {
boolean overlaps = false;
tChart1.getGraphics3D().setFont(tChart1.getAxes().getBottom().getLabels().getFont());
int tmpWidth = tChart1.getGraphics3D().textWidth(myLabel);
int tmpX = tChart1.getAxes().getBottom().calcPosValue(myXValue) - tmpWidth / 2;
for (int i=0; i<tChart1.getAxes().getBottom().getCustomLabels().size(); i++) {
AxisLabelItem tmpI =tChart1.getAxes().getBottom().getCustomLabels().getItem(i);
int tmpWidth2 = tChart1.getGraphics3D().textWidth(tmpI.getText());
int tmpX2 = tChart1.getAxes().getBottom().calcPosValue(tmpI.getValue()) - tmpWidth2 / 2;
if (((tmpX>tmpX2) && (tmpX<tmpX2+tmpWidth2)) ||
((tmpX+tmpWidth>tmpX2) && (tmpX+tmpWidth<tmpX2+tmpWidth2)) ||
((tmpX<tmpX2) && (tmpX+tmpWidth>tmpX2+tmpWidth2))) {
overlaps = true;
}
}
Rectangle chartRect = tChart1.getChart().getChartRect();
if ((!overlaps) && (tmpX>chartRect.x) && (tmpX+tmpWidth<chartRect.x+chartRect.width)) {
tChart1.getAxes().getBottom().getCustomLabels().add(myXValue, myLabel);
}
}
这里唯一的问题是 calcPosValue 需要绘制一次图表才能正常工作。而且,由于 Android 控制重绘,因此技巧是在 ChartPainted 事件中执行此操作,并删除执行此操作的事件,以免重复该过程。即:
private void createCustomLabels() {
tChart1.addChartPaintListener(new ChartPaintAdapter() {
@Override
public void chartPainted(ChartDrawEvent e) {
for (int i=0; i<tChart1.getAxes().getBottom().getMaximum(); i++) {
addXCustomLabel(i, "Value " + i + " here");
}
tChart1.removeChartPaintListener(this);
tChart1.refreshControl();
}
});
}
正如您所观察到的,自定义标签不会调用 AxisLabelResolver。这是根据设计而定的。
关于java - 控制 TeeChart 中的轴标签位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28982258/
我正在尝试找出客户端坐标中所有四个角的 Teechart 控件和图形 Canvas 。 有谁知道返回所有四个角的 Canvas 坐标的 Teechart API? 谢谢 最佳答案 要确定图表在窗体中的
我将 TChart 与一组在运行时创建的 TFastLineSeries 一起使用。 是否可以将一半系列使用左轴作为 Y 轴,另一半使用右轴,每个轴都有单独的最小值/最大值? 我没有看到可以将轴分配给
我将 TChart 与一组在运行时创建的 TFastLineSeries 一起使用。 是否可以将一半系列使用左轴作为 Y 轴,另一半使用右轴,每个轴都有单独的最小值/最大值? 我没有看到可以将轴分配给
我的应用程序中运行了一个 tdbchart,它每 5 秒更新一次,但是当它更新时它会锁定我的表单,因此我无法在更新时使用它。 有什么方法可以阻止表单在发生更新时锁定? 如果用户不能每 5 秒使用一次表
我使用 Delphi XE 中内置的 TeeChart 来绘制图表。 当我只是将图表放在表单上时,我可以使用所有这些选项来导出/保存或打印预览,但这些选项在运行时不存在。 我想添加一个用于保存对话框和
我用Steema TeeChart制作了一个图表,图表已经完成,但是当它在布局中绘制时,由图表制作的布局周围有一个边框,不在图表内部,我使用了getwalls。 setVisible(false) 但
我正在制作一个软件,可以在 teechart 图表上绘制从电路测量的样本。 用户需要能够在屏幕上选择样本的时间窗口。例如,图表在屏幕上有 10 个固定分区,每个分区可以代表 0.5 秒、1 秒、2 秒
我使用 TeeChart JAVA for Android 创建轮廓。 Series series = Series.createNewSeries(mChart.getChart(), Contou
我正在尝试自定义 Teechart Pie。现在看起来是这样的: 如您所见,图例中有值和名称。如何删除图例中的值并仅保留名称? 谢谢。 最佳答案 使用它强制图例仅显示标签: tChart1.getLe
我正在寻找一种将数据添加到 OHLC 系列而不指定点的日期值的方法。 所以我们假设我有一个 List哪里Candle对象包含 high 的值, low , open和close ,但不是date .
我正在使用 TreeChart 制作如图所示的指标。 但我有一个问题,我无法为该仪表制作三色渐变。这是我的代码 Steema.TeeChart.TChart tChart = new
我正在 Embarcadero XE 上开发一个应用程序,我从以太网端口接收实时数据并显示在屏幕上的 teechart 图表上。 该应用程序像示波器一样工作,即图表显示有一个数据时间窗口(例如 10
我在刷新包含很多点的整个图表时遇到了性能问题,想询问是否有办法减少重新绘制图表所需的时间。 例如,我的图表包含一百个 TAreaSeries,每个值 1000 点。这些值被构建一次并且之后不会改变。但
是否可以使用 TeeChart 用单个 TLineSeries 绘制多条线?我想在数据集中指定系列应分组的字段,每组绘制一条线。或者这是不可能的,并且应该为应该显示的每个组/线添加一个系列到图表中?
我们已经评估了 Java 版 TeeChart,并决定使用它。然而,有一个问题与我们有关,我们需要您的帮助来澄清它。该问题与 TeeChart 评估版本的性能有关。我们观察到,当 colorgrid
我已经下载了适用于 Android 的 TeeChart 评估版,我想在使用 RemObjects Oxygene 开发的应用程序中使用它。 如果我使用默认模板创建一个简单的 hello world
可以增加馅饼的厚度吗?现在太薄了,我想要厚两倍... 最佳答案 您可以通过增加 Chart3DPercent 来实现此目的: tChart1.getAspect().setChart3DPercent
我正在尝试使用 TeeChart 库显示烛台系列。 一切都很好,除了我无法控制显示的数据范围。问题是,当我向系列添加新数据时,我想滚动底部轴以显示最后的 N 值。例如。当我添加新蜡烛时,我想滚动 +1
我在 TeeChart 中显示底部轴的轴标签时遇到问题。在我的例子中,轴标签相当长,并且以 dd.MM.yyyy 格式表示日期 在某些情况下,当标签彼此靠近放置时,它们会显示为一个在另一个之上(发生重
我正在尝试动态更新主图表系列数据,但如果我移动 ColorBand 或者在图表已经重新绘制并出现大量 ArrayOutOfIndex 异常时更新图表,ScrollPager 会卡住图表的框架。我理解为
我是一名优秀的程序员,十分优秀!