О масштабировании тегов в облаке тегов
Я реализую облако тегов на мобильном устройстве. Детали модели данных и т. Д. Здесь не особенно важны. Мой вопрос о масштабировании тегов:
Какое "лучшее" выражение отображает частоту тега в размер шрифта?
Я посмотрел на этот пост, обсуждающий линейное и логарифмическое масштабирование, и этот ответ из набросков Адриана Куна о полиномиальном подходе для вдохновения. Тем не менее, я, кажется, помню пост в каком-то месте в Интернете с гораздо большим исследованием этой проблемы.
Я также нашел некоторые " лучшие практики" в блоге, хотя я не уверен в провидении лучших практик. Они не комментируют масштабирование частоты.
Какие у меня есть альтернативы для масштабирования тегов, и какой метод является предпочтительным / стандартным? Я также рассматриваю минимальные размеры шрифтов, максимальное количество тегов, цветов и т. Д.
Изменить: В соответствии с обсуждением в этом вопросе, меня интересует "стандартное" tagcloud, с изменениями размера шрифта.
3 ответа
В прошлом году я работал над небольшим проектом облака тегов, в котором использовал что-то вроде
β = (int) (((maxθ - minθ) x ω) + minθ + 0,5)где ω - взвешивание, предварительно рассчитанное по некоторой метрике (в вашем случае частота шрифтов), minθ и maxθ - нижняя и верхняя границы, а β - конечное значение. Это может быть применено к любой визуальной характеристике (размер шрифта, цвет, вес, если поддерживается и т. Д.).
Я обнаружил, что линейное и логарифмическое масштабирование имеют тенденцию зависеть от распределения набора данных. Я обнаружил, что в наборах данных с заметными выбросами tanh был полезен для "сглаживания" результирующих значений.
В этом PDF-файле содержится отличное обсуждение, в котором обсуждаются масштабирование, кластеризация и усечение тегов для отображения.
Решение, которое я нашел, хорошо работает следующим образом
font_size = (max_font_size - min_font_size) * (Math.sin(1.5*(X)) + minsize
где X - нормализованное значение, которое вы хотите отобразить на размер шрифта
X = (this_value-min_value)/(max_value-min_value)
это увеличивает разность размеров для нижних 3 квартилей диапазона, например, чтобы минимизировать влияние высоких выбросов