在图表上设置左轴可将小数值增加到.13?

时间:2013-03-19 20:05:12

标签: delphi delphi-xe teechart

这个问题涉及另一个持续存在的问题:Format Stones and Pounds correctly?

我认为在决定做什么之前,在这里问一个单独的问题会更合适。

如上所述,我将TChart中的体重表示为宝石和体重。

在我决定是否更改我正在使用的数据类型(Double)之前,如上面的评论所示,我希望看到我如何在石头和磅中显示我的图表,就像我最初的想法一样。

请参阅此示例图像我为了演示目的而操作:

enter image description here

问题是图表的左侧轴,如图像状态中的注释 - 图表在到达下一个整数之前递增到.99(磅)(在这种情况下是石头)。例如:

  • 03.00
  • 02.99< .99 =达到3.00之前的最大数量
  • 02.98
  • 02.97

我需要像这样设置左轴:

  • 03.00
  • 02.13< .13 =达到3.00之前的最大数量
  • 02.12
  • 02.11
  • 02.10

并显示磅部分的所有标签。

在达到下一个整数(石头)之前,我可以用某个设置来设置.00(lbs)的最大值吗?

目前似乎没有任何意义,从另一个问题我理解的是,我应该使用整数并仅表示为磅。

我希望在进行任何更改之前看看它是如何看的,理想情况下我希望图表尽可能与图像保持一致。

希望这是有道理的。

感谢。

更新

我以为我会更新我最终工作的变化。

所有的功劳都归功于David Heffernan,他坚持不懈地解释我的错误,并撰写详细的信息和建议。

我还需要做一些工作,但现在这里是我现有的更新图表:

enter image description here

我没有在标签中完成这些值,但是从上面的示例图片中可以看出我使用的值:

  • 15.2
  • 15.3
  • 15.11
  • 15.13
  • 16.0
  • 16.4

1 个答案:

答案 0 :(得分:3)

您无法使用当前的表示来绘制合理的图表。假设您有一个带有以下值的条形图:

10st 12lb
10st 13lb
11st 0lb
11st 1lb

图表如下所示:

enter image description here

暂时忘记轴标记。看看吧之间的区别。每个相邻值之间的差异是1磅。但该图表讲述了一个完全不同的故事。我在这里使用了条形图,但该原则适用于所有图表类型。

底线是你需要用权重的真实十进制表示来表示你的体重值。您的陈述不遵守算术的基本定律。所以,半个石头必须是0.5。试图用数字0.07表示一半只是要求一个痛苦的世界。

使用此公式将石头和磅转换为权重的真实浮点表示:

FloatingPointWeightValue := Stones + Pounds/14.0;

或者,如果你只存储磅,那么它只是

FloatingPointWeightValue := Pounds/14.0;

我建议您确保轴的Increment至少为1.如果您需要小于此值,则必须进入自定义轴标签标题。当您添加值时,请为它们添加标签。这将允许图表使用合理的标签来识别值。例如:

Series1.Add(10 + 12/14, '10st, 12lb');
Series1.Add(10 + 13/14, '10st, 13lb');
Series1.Add(11 + 00/14, '11st, 0lb');
Series1.Add(11 + 01/14, '11st, 1lb');

结果如下:

enter image description here

你显然会编写一堆辅助函数来处理这个问题。我建议将原始数据存储为磅。所以,11st 1lb将被存储为11 * 14 + 1 = 155.那么你将拥有这些助手:

function StonesFromPounds(Pounds: Integer): Double;
begin
  Result := Pounds / 14.0;
end;

function StonesPoundsLabel(Pounds: Integer): string;
begin
  Result := Format('%dst %dlb', [Pounds div 14, Pounds mod 14]);
end;

然后数据填充看起来像这样:

Pounds := 152;
Series1.Add(StonesFromPounds(Pounds), StonesPoundsLabel(Pounds));

您可以完全自由地为权重创建文本标签。如果你想要比10st 13lb更简洁的东西,那么你可以根据需要调整辅助函数。

现在,这已经是一个很长的答案,所以我将总结一下我的建议:

  1. 当你从任何来源获取数据时,从他们到达的任何格式转换为定义良好的存储格式,即原始数据格式。
  2. 将此原始数据存储为整数值,单位为磅。
  3. 绘制权重时,按Stones := Pounds/14.0
  4. 转换为以宝石为单位的浮点值
  5. 将文本标签与您绘制的每个值相关联,以便您可以以人类可读的形式显示权重。
  6. 如果您需要在整个宝石值之间标记重量,请准备好提供自定义标签轴。