1

折れ線グラフの Y 軸の境界の計算に関して、Excel がどのように「正しい」と感じるかを再現しようとしています。

例として、現在 3 つのデータポイントを含むグラフがあるとします。(0, 100)、(1,500)、(2,930)。

私が現在持っている単純なコードは、Y 軸の最小値を 100 に設定し、Y 軸の最大値を 930 に設定します。0 の値を持たないデータセットがチャートのサイズを歪めないようにするという考えでした。これは機能しますが、もっと良くなる可能性があると感じています。

上記の例では、Excel は 0 ~ 1000 の範囲のデータポイントをプロットします。同じ「気持ちいい」範囲をプロットする一般的なアルゴリズムを作成しようとしています。ただし、少しトリッキーであることが証明されています。

いくつかの情報が必要だと思います:

  • 上限値と下限値の桁数 (10 の累乗)。
  • 常にデータ ポイントの上限/下限を取得します。データ ポイントがプロットされた最大/最小範囲と同じ値を共有する場合は明確ではありません。

そこから、私は少し途方に暮れています。

最大データ ポイント値として 930 を使用すると、その桁数は 3 であることがわかります。したがって、最大値に 1 を追加し、残りをゼロにすると、1000 になります。

最大データ ポイント値として 1030 を使用すると、その桁数は 4 であることがわかります。最大値に 1 を追加し、残りを 0 にすると、結果は 2000 になります。 )、(1,500)、(2,930)、(3,1030)。

この問題は、値が大きくなるとすぐに悪化します。常に最大値を大きくするのは適切ではありませんが、そうなる場合もあります。より良いアプローチへの洞察を得ることができるこれに関する経験はありますか?

4

2 に答える 2

3

非常に堅牢なアプローチは次のとおりです。

  • 範囲を取るr = max - min
  • 約のパディングを想定します。5パーセント(必要に応じて数値を調整)、pad = r * 0.05
  • pad次の値に切り上げます(1,2,5)*10^n(たとえば、 は に切り上げられますが、は に切り上げられます)。0.230.55.510
  • 取ったaxis_min = floor(min/pad-1)*pad
  • 取ったaxis_max = ceil(max/pad+1)*pad
于 2011-09-27T17:14:31.610 に答える
1

範囲を次のようなものから始めてみませんか?

(1-padding) * minimum_value // minimum > 0
(1+padding) * minimum_value // minimum < 0

(1+padding) * maximum_value // maximum > 0
(1-padding) * maximum_value // maximum < 0

ここでpadding、はとの間の数字です。例:。010.05

于 2011-09-27T17:03:08.090 に答える