【问题标题】:Fitting tag cloud to available space将标签云拟合到可用空间
【发布时间】:2009-03-05 01:27:01
【问题描述】:

鉴于单词及其频率和屏幕空间区域,将标签云拟合到空间的好方法是什么?我能想到的两个变量是:

  • 字体大小(绝对和渐变)
  • 字数

我能想到的所有方法都需要迭代,例如设置单词数量的上限,然后对字体大小使用二进制搜索,直到单词恰好适合该区域。我宁愿有一个分析解决方案。

我的情况的一个复杂情况是云可以调整大小,因此算法需要能够很好地处理 100x100 像素或 1000x1000 像素。

编辑:我应该说这是针对富客户端应用程序,而不是 Web(因此可以调整大小)。另外,我希望听到一些经验,例如“没有人在标签云中查看超过 100 个单词,所以不要费心显示它们”。

【问题讨论】:

    标签: user-interface tag-cloud


    【解决方案1】:

    我们在 Software Cartographer 中所做的是

    • 有最大字体大小,
    • Math.sqrt(term.frequency) 映射到这个范围(因为单词是二维区域),
    • 仅显示前 30 个(左右)字词,
    • 排除任何小字体,即小于 6 pt 的字体,
    • 按字母顺序对云中的术语进行排序。

    替代品

    • 不要显示前 30 个,而是选择顶部的 k,这样就没有滚动条了。
    • 不要将最常用的词映射到最大字体大小,而是使用全局映射,以使词大小在云之间具有可比性(这取决于您的使用案例)。

    据我所知,没有关于术语云的实证研究(也许 Worlde 名气的 Jonathan Feinberg 在这方面了解更多)。

    【讨论】:

      【解决方案2】:

      这听起来像knapsack problem,但倒过来了,变量更多。没有简单的完整解决方案,但您很可能能够找到在大多数情况下接近最优解决方案的启发式算法。

      PS:您只能使用以像素为单位的字体大小来可靠地完成这项工作。以像素为单位的字体大小在优秀的网页设计中是一件坏事 (TM)。

      【讨论】:

        【解决方案3】:

        您可以创建一组预先确定的发生范围,然后将其与您的云中的字体大小相关联。例如:

        • 0 - 100: 1 em
        • 101 - 500: 1.2 em
        • 501 - 1000:1.4 em 粗体
        • 1001 - 1500:1.8 em 粗体
        • 1501 - 2000:2.0 em 粗斜体/下划线/闪烁/其他等等...

        您可以通过根据容器的大小向所有范围添加固定偏移量来缩放云。

        【讨论】:

        • 有什么方法可以得到容器的大小,以 ems 为单位?
        猜你喜欢
        • 2011-11-01
        • 2017-01-02
        • 1970-01-01
        • 2021-11-19
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        相关资源
        最近更新 更多