1

这个问题与此处的另一个持续问题有关:正确格式化石头和磅?

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

如上面链接所述,我将 TChart 中的重量表示为石头和磅。

在我决定是否更改我当前使用的数据类型(双)之前,我想看看如何按照我最初的想法以石头和英镑显示我的图表。

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

在此处输入图像描述

问题是图表的左轴,因为图像状态中的注释 - 图表在达到下一个整数(在本例中为石头)之前递增到 0.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(磅)的最大值吗?

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

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

希望这是有道理的。

谢谢。

更新

只是想我会更新我最终开始工作的更改。

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

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

在此处输入图像描述

我还没有完成标签中的值,但是从上面的示例图像中,这是我使用的值:

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

1 回答 1

3

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

第 10 个 12 磅
第 10 个 13 磅
第 11 个 0 磅
第 11 磅 1 磅

图表将如下所示:

在此处输入图像描述

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

最重要的是,您需要用真正的十进制表示来表示您的体重值。您的表示不遵守基本的算术定律。所以,半个石头必须是 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');

结果如下所示:

在此处输入图像描述

您显然会编写一堆辅助函数来处理这个问题。我建议将原始数据存储为磅。因此,第 11 个 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. 如果您需要在宝石的整数值之间标注重量,请准备好提供自定义标签轴。
于 2013-03-19T20:47:43.160 回答