3

我有一个基本上是日历的应用程序,用户可以输入每天的事件。现在,我必须找到显示整月日历的最佳方式,同时突出最繁忙的日子。

显然颜色是这里的选择,但我想知道你们会怎么做。我头脑风暴了以下几点:

  • 获取max一天的事件,然后从那里除以可用颜色的数量。所以如果一天有 30 个事件,我们有 3 种颜色,第一个是从 0 到 9,接下来是从 10 到 19,最后一个是从 20 开始。
  • 找到average并将其除以colors/2,因此如果平均值为 10 个事件并且我们有 3 种颜色,则数学运算将是 10/1.5 = 6.66,这意味着第一个颜色范围将从 0 到 6.66,第二个颜色范围从 6.67 到 13.32,并且最后一次从 13.33 开始。

但是,我不确定这是否是解决此问题的最佳方法。两者都是线性的,如果我们的平均值约为 20 并且最大值有 100 个事件,那么第一个可能会使事情变得混乱,只会出现两种颜色。

我不是静态学家,但我认为这个问题可以用百分位数和四分位数来解决,但我不确定如何实现它。

谢谢。

4

2 回答 2

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 回答