2010-03-04 101 views

回答

5

你需要设置一个最小尺寸,所以也许fontsize = minsize + factor * percentage

您可能想要限制尺寸范围;也许采取sqrt或日志的百分比,但这取决于你的分布。

对于另一种技术,看看从poeticcode这个博客帖子上Tag Clouds Algorithms

接下来,在直线插补,我们怎么设置字体大小/颜色强度最小和最大的界限?例如,我注意到Amazon.com的字体大小在80%到280%之间。因此,云中最低的标签将获得80%的字体大小,最高的标签达到280%。我已决定去与下式

150 *(1.0 +(1.5 * M-MAXM/2)/ MAXM)

这很好地给出了一个字体尺寸从75%至300%为指标的变化从0到maxm。

2

我会检查每个元素的发生并跟踪“最大值”(具有最高计数的元素,因为这将是您的度量)。

接下来计算每个元素出现的百分比,与具有最大值(100%)的元素进行比较。例如:

foreach ($elements as $element) { 
    $percentage = floor(($element['count']/$maximum) * 100); 
} 

接下来为20/40/60/80/100百分比值创建CSS样式,并根据百分比应用正确的CSS样式。

或者你可以按你的建议计算字体大小。

首先得到您的最大。和分钟并计算点差。 ($ max - $ min)。你的字体大小增量将是“步” - 这基本上是($ max - $ min)/ $ spread。现在

可以相应地计算出你的字体大小:

$min_size + ($element['occurrence'] - $smallest_array_value) * $step 

不要忘记圆你的结果。

0

可以写第二部分给你标签云实现最小和最大并传播我有点困惑。

0

我做了标签云计算是这样的:

$v - incoming value, 
$minV - minimal value from dataset, 
$maxV - maximal value from dataset, 
$minFS - minimum font size, 
$maxFS - maximum font size, 

function roundFontSize($v, $minV, $maxV, $minFS, $maxFS) { 
    return $minFS + floor($v/(($maxV - $minV)/($maxFS - $minFS))); 
} 

这允许您根据圆您需要的字体大小。

字体大小不会超过$ minFSad $ maxFS的字体大小范围。