3

基本的にカレンダーのアプリがあり、ユーザーは毎日のイベントを入力できます。今、私は最も忙しい日を強調しながら、丸1か月のカレンダーを表示するための最良の方法を見つけなければなりません。

明らかにここでの選択は色ですが、皆さんはどうやってそれを行うのだろうかと思います。私は次のことをブレインストーミングしました:

  • 1日のイベントを取得し、maxそこから、使用可能な色の数で割ります。したがって、ある日に30のイベントがあり、3つの色がある場合、最初のイベントは0から9になり、次のイベントは10から19になり、最後のイベントは20になります。
  • を見つけてaverageそれをで割るとcolors/2、平均が10イベントで、3つの色がある場合、計算は10 / 1.5 = 6.66になります。つまり、最初の色の範囲は0から6.66になり、2番目の色の範囲は6.67から13.32になります。 13.33以降の最後。

ただし、これがこれを解決するための最良の方法であるかどうかはわかりません。どちらも線形であり、平均が約20で、最大が100のイベントである場合、最初の色はかなり混乱する可能性があり、2つの色だけが表示されます。

私は統計家ではありませんが、この問題はパーセンタイルと四分位数で解決できると思いますが、どのように実装するかはよくわかりません。

ありがとう。

4

2 に答える 2

1

タグクラウドの構築によく使用される対数分布のアルゴリズムを提案します。タグはあなたの日数であり、タグの数は1日のイベント数です。

PHPとPythonの適切な実装(まだ適切にチェックされていません)は、これのようです。次に例を示します。

$tags = array(
    array('tag'   => 1,
          'count' => 10),
    array('tag'   => 2,
          'count' => 30),
    array('tag'   => 3,
          'count' => 5),
    array('tag'   => 4,
          'count' => 5));
$colours = array('green', 'yellow', 'red');
foreach(tagcloud($tags, 0, count($colours) - 1, 0) as $d) {
  echo  '<div style="background-color:' . $colours[floor($d['size'])] . '">Day: '.$d['tag'].' Events: '.$d['count'].'</div>';
}
于 2011-02-02T08:17:02.650 に答える
0

いくつかのアイデア:

  1. 色の均等な分布を確保する:Nイベント/日を注文し、各色に同じ日数を割り当てます
  2. 個別のバケットを使用する代わりに、Nイベント/日を連続した色の範囲の値にマップします。たとえば、0からmax(events)からRGB値まで。
  3. 非線形分布(たとえば、正規分布、指数分布など)を見つけます。探している式はCDF(http://en.wikipedia.org/wiki/Cumulative_distribution_functionを参照)であり、これを使用して次の数を変換できます。イベント/日からパーセンタイルまで。
于 2011-02-01T23:52:18.820 に答える