これは少し面倒ですが、シンプルでうまく機能します。
最初に、ティック間に許容される間隔を決定します。時間システム (10 進法? 60 進法? 1 か月の長さ?) の狂気のために、このリストを生成するための特に優れたアルゴリズムはありません。人々がよく知っている自然な間隔を選んで、それをプログラムにハードコードするだけです:
...etc...
every 0.1 second
every 1 second
every 5 seconds
every 15 seconds
every 1 minute
every 5 minutes
every 15 minutes
every 1 hours
every 2 hours
every 4 hours
every 8 hours
every day, midnight
every 7 days, midnight
every month start
every quarter start
every year start
every 10 years
...etc...
次に、特定の軸幅と表示する特定の時間間隔を指定して、リストを反復処理し、生成される目盛りの数と、そのスケールを使用した場合の目盛りがピクセル単位でどれだけ近いかを計算します。この計算は、単純な除算を使用して行われます。目盛りが近づきすぎないという条件で、目盛りの数が最大のスケールを選択します。この素朴なアルゴリズムは完全に適切なパフォーマンスを提供するはずですが、最適化したい場合は、リスト全体を反復するのではなく、バイナリ検索を使用できます (おそらく努力する価値はありません)。
少し面倒ですが、これを行うライブラリが見つからない限り、より良い方法はわかりません。私はこの機能を提供するライブラリを知りませんが、自分でこれを書きたくない場合は、そこからコードを取得できる同様のことを行うオープン ソース プロジェクトがたくさんあるはずです。