你想出了什么好的标签云逻辑?像 fontsize = factor * percentOfOccurance ....
4 回答
你需要设置一个最小尺寸,所以也许fontsize = minsize + factor * percentage
.
您可能希望限制尺寸范围;也许取 sqrt 或百分比的对数,但这取决于您的分布。
对于另一种技术,请查看关于Tag Clouds Algorithms的 poeticcode 的这篇博文:
接下来,在线性插值中,我们如何设置字体大小/颜色强度的最小和最大边界?例如,我注意到 Amazon.com 的字体大小在 80% 到 280% 之间。因此,云中最低的标签将获得 80% 的字体大小,最高的标签将获得 280% 的字体大小。我决定使用以下公式
150*(1.0+(1.5*m-maxm/2)/maxm)
当度量标准从潜在的 0 变为 maxm 时,这很好地给出了从 75% 到 300% 的字体大小。
我会检查每个元素的出现并跟踪“最大值”(计数最高的元素,因为这将是您的衡量标准)。
接下来计算每个元素的出现百分比,与具有最大值的元素(即 100%)相比。例如:
foreach ($elements as $element) {
$percentage = floor(($element['count'] / $maximum) * 100);
}
接下来为 20 / 40 / 60 / 80 / 100 百分比值创建 CSS 样式,并根据百分比应用正确的 CSS 样式。
或者您可以按照您的建议计算字体大小。
首先得到你的最大值。和 min 并计算点差。(最大 - 最小)。您的字体大小增量将是“步骤” - 基本上是 ($max - $min) / $spread。
现在您可以相应地计算您的字体大小:
$min_size + ($element['occurrence'] - $smallest_array_value) * $step
不要忘记对结果进行四舍五入。
可以将第二部分写给您标记云实现最小和最大并传播我有点困惑。
我做了这样的标签云计算:
$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 的字体大小范围。