1

この質問は、ここで進行中の別の質問に関連しています:ストーンとポンドを正しくフォーマットしますか?

何をすべきかを決める前に、別の質問としてここで尋ねる方が適切だと思いました。

上記のリンクで説明したように、TChart では重量を石とポンドで表しています。

上記のコメントが示唆するように、現在使用しているデータ型 (Double) を変更するかどうかを決定する前に、当初考えていたようにストーンズとポンドでチャートを表示する方法を確認したいと思います。

デモ目的で操作したこのサンプル画像を参照してください。

ここに画像の説明を入力

問題は、チャートの左軸です。イメージ状態のメモとして - チャートは、次の整数 (この場合はストーン) に到達する前に .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

現在の表現を使用して、合理的なチャートをプロットすることはできません。次の値を持つ棒グラフがあるとします。

10st 12ポンド
10st 13ポンド
11位 0ポンド
11位 1lb

チャートは次のようになります。

ここに画像の説明を入力

軸のラベル付けについてはしばらく忘れてください。バーの違いを見てください。隣接する各値の差は 1 ポンドです。しかし、グラフはまったく別の話をしています。ここでは棒グラフを使用しましたが、原則はすべての種類のグラフに適用されます。

肝心なのは、体重の真の 10 進数表現で体重値を表す必要があるということです。あなたの表現は算術の基本法則に従っていません。したがって、石の半分は 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 番目の 1 ポンドは 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 に答える