フロート データを 2D グラフにプロットしています。グラフの軸をきれいに見える小さな単位に調整する必要があります。明らかに、この単位はデータの大きさによって異なります。軸を見栄えの良い数値に分割する良い方法を見つけようとしています。たとえば、データが -1.3345 から +5.882 までの場合、1.0 または 0.5 の単位で分割される可能性があります。私のデータが-100から800までの場合、軸を100または50の単位に分割します(それが理にかなっていることを願っています)現在、範囲(最大値-最小値)を固定整数で分割し、単位を取得していますが、末尾の数字が長い醜い数字が表示されます。これを行う賢い方法はありますか?
2 に答える
適切なステップを計算する 1 つの方法は、範囲の長さの最上位桁 (つまりdiff = maxVlaue - minValue
) の値を見つけ、それをステップとして使用することです。最上位桁の値を計算するには、次の簡単な式を使用します。
pow(10, floor(log10(diff)))
これは、差の十進対数を取り、小数部分があればそれを破棄し、10 をその対数で累乗します。差が 7.2165 の場合、計算は 1 を返します。721.65 の場合、100 が返されます。
この計算の欠点の 1 つはdiff
、9.99のグリッド ステップdiff
と 1.001 のグリッド ステップが同じになることです。これに対処する 1 つの方法は、ステップで得られるグリッド ラインの数を計算し、ラインの数が不十分な場合 (たとえば 3 未満) はステップを 10 倍減らすことです。
ACM Algorithm 463n
は、データ ポイントxmin
とを含む間隔の要求が与えられた場合に、スケールの最小値と最大値、およびスケールの目盛り間の距離の出力 xminp、xmaxp、dist を使用して適切な軸スケールを生成する 3 つの単純な関数を提供しますxmax
。
Scale1()
n
おおよその間隔を持ちdist
、1、2、または 5 の 10 倍の整数乗である線形スケールを返します。Scale2()
は正確な間隔で線形スケールを与えn
ます (xminp と xmaxp の間のギャップは によって生成されるギャップよりも大きくなる傾向がありますScale1()
)。Scale3()
対数目盛を与える.
コードは Fortran ですが、解釈して他の言語に変換するのは非常に簡単です。よりきれいなスケールを提供するもっと複雑な関数がありますが (例: の関数gnuplot
)、Scale1 は最小限のコードで作業を行う可能性があります。
(編集)
元の 1973 年の論文のテキストをオンラインで見つけました。ここには、上記のリンク先のコードよりも詳しい説明が記載されています。