【问题标题】:TChart - Dont plot values that are less than 0?TChart - 不要绘制小于 0 的值?
【发布时间】:2013-02-28 20:43:23
【问题描述】:

简介

我正在使用 TChart 组件,发现选项相当混乱,很难找到我需要的东西。

图表的左轴最小值为 0,最大值为 5000,下轴最小值为 0,最大值为 52(一年中的周数)。

在我的图表中,我有 2 个系列,这些系列是根据我创建的记录中的值填充的,可以在运行时进行编辑,到目前为止一切正常。

问题

请看下图中填充了一些随机值的部分图表:

我不确定是否存在这样的选项,但请注意,从第 4 周开始,如果没有添加任何值,则会出现一条实线。

我不希望图表绘制小于 0 的值,因此在此示例中,从第 4 周开始,应该不再有线条(我可以确认,从第 4 周开始,我将值设置为 -1 )

第 1 周到第 4 周没有显示这条底部红线,显然是因为值大于 0,因此绘制在这条线的上方,但这应该会让我的问题更加清晰。

那么,如何防止图表绘制/绘制小于 0 的值,这对于图表的底轴很重要?

我确信某处必须有一个简单的选项,如果有一个我就找不到它,因为我对 TChart 组件不太熟悉。

【问题讨论】:

  • 图表应该如何处理额外的值?例如,如果在第 9 周增加了正值,会发生什么 - 第 5-8 周会发生什么?
  • 在我的 Jedi TJvChart 中,我会说您绘制 NaN 而不是负值以完全省略它。 (如果 X
  • @KenWhite 你是对的,但如果我老实说,我从不提供任何东西。我刚刚测试了 LU RD 的答案,我明白了你的意思。我想我会保持原样,我可能会看看 Warren 指出的 TJvChart,但现在还不想改变它。

标签: delphi charts


【解决方案1】:

您可以在向系列添加值时将它们添加为空值。

这将阻止它们显示。

Ken 说得对,一个棘手的情况是处理被空值包围的单个值。 选择除FastLine 之外的其他系列类型并显示点和线可能效果更好。

要让FastLine 系列显示间隙,请设置:

Series1.IgnoreNulls := False;

并区分低于零的值:

if (y < 0) then
  Series1.AddNullXY(x, y, '')
else
  Series1.AddXY(x, y, '');

【讨论】:

  • AddNullXY 是我正在寻找的东西,我试过了,但它并没有像前面提到的那样工作。我会接受这个答案,但决定保持图表不变。
  • 更高版本的 TChart 已弃用 IgnoreNulls 属性并将其替换为新的 TreatNulls 属性。在这种情况下,您可能需要 TreatNulls := tnDontPaint
【解决方案2】:
if y < 0 then
   LineSeries1.AddXY(x, y, '', clNone)
else
   LineSeries1.AddXY(x, y, '', clRed);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 2011-06-13
    • 2018-06-19
    • 2022-11-27
    • 2017-02-04
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多