这个问题涉及另一个持续存在的问题:Format Stones and Pounds correctly?
我认为在决定做什么之前,在这里问一个单独的问题会更合适。
如上所述,我将TChart中的体重表示为宝石和体重。
在我决定是否更改我正在使用的数据类型(Double)之前,如上面的评论所示,我希望看到我如何在石头和磅中显示我的图表,就像我最初的想法一样。
请参阅此示例图像我为了演示目的而操作:
问题是图表的左侧轴,如图像状态中的注释 - 图表在到达下一个整数之前递增到.99(磅)(在这种情况下是石头)。例如:
我需要像这样设置左轴:
并显示磅部分的所有标签。
在达到下一个整数(石头)之前,我可以用某个设置来设置.00(lbs)的最大值吗?
目前似乎没有任何意义,从另一个问题我理解的是,我应该使用整数并仅表示为磅。
我希望在进行任何更改之前看看它是如何看的,理想情况下我希望图表尽可能与图像保持一致。
希望这是有道理的。
感谢。
更新
我以为我会更新我最终工作的变化。
所有的功劳都归功于David Heffernan,他坚持不懈地解释我的错误,并撰写详细的信息和建议。
我还需要做一些工作,但现在这里是我现有的更新图表:
我没有在标签中完成这些值,但是从上面的示例图片中可以看出我使用的值:
答案 0 :(得分:3)
您无法使用当前的表示来绘制合理的图表。假设您有一个带有以下值的条形图:
10st 12lb 10st 13lb 11st 0lb 11st 1lb
图表如下所示:
暂时忘记轴标记。看看吧之间的区别。每个相邻值之间的差异是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');
结果如下:
你显然会编写一堆辅助函数来处理这个问题。我建议将原始数据存储为磅。所以,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更简洁的东西,那么你可以根据需要调整辅助函数。
现在,这已经是一个很长的答案,所以我将总结一下我的建议:
Stones := Pounds/14.0