Qual è la formula per calcolare la font-size per i tag in un tagcloud?
Domanda
Ho un tag cloud e ho bisogno di sapere come posso cambiare il font-size per i tag più utilizzati.
Ho bisogno di impostare un min-font-size e di un max-font-size.
Soluzione
Si potrebbe utilizzare una valutazione lineare o logaritmico del numero di elementi associati a un determinato tag relativo al più grande etichetta, moltiplicarlo per la differenza tra le dimensioni massime dei caratteri minimi e, quindi aggiungerlo alla dimensione del font minimo. Ad esempio, la matematica in pseudocodice potrebbe essere:
let min = 12, max = 24
for each tag
font = (items / items in biggest tag) * (max - min) + min
Altri suggerimenti
Per rendere @ risposta di Delan più chiaro ho creato alcuni esempi in lingue mi è familiare.
esempio in Javascript
var tags =
[
{ Name: "c#", Uses: 100 },
{ Name: ".net", Uses: 75 },
{ Name: "typescript", Uses: 50 },
{ Name: "lua", Uses: 50 },
{ Name: "javascript", Uses: 25 },
{ Name: "jquery", Uses: 1 },
{ Name: "c++", Uses: 0 },
];
var max = 100; // Should be computed
var min = 0; // Should be computed
var fontMin = 10;
var fontMax = 20;
for (var i in tags)
{
var tag = tags[i];
var size = tag.Uses == min ? fontMin
: (tag.Uses / max) * (fontMax - fontMin) + fontMin;
}
Esempio in C #
var tags = new List<Tag>
{
new Tag { Name = "c#", Uses = 100 },
new Tag { Name = ".net", Uses = 75 },
new Tag { Name = "typescript", Uses = 50 },
new Tag { Name = "lua", Uses = 50 },
new Tag { Name = "javascript", Uses = 25 },
new Tag { Name = "jquery", Uses = 5 },
new Tag { Name = "c++", Uses = 5 },
};
int max = tags.Max(o => o.Uses);
int min = tags.Min(o => o.Uses);
double fontMax = 20;
double fontMin = 10;
foreach (var tag in tags)
{
double size = tag.Uses == min ? fontMin
: (tag.Uses / (double)max) * (fontMax - fontMin) + fontMin;
}
Prova:
<div data-i2="fontSize:[10,30]">
<span data-i2="rate:1">A</span>
<span data-i2="rate:4">B</span>
<span data-i2="rate:7">C</span>
<span data-i2="rate:12">G</span>
<span data-i2="rate:5">H</span>
</div>
Poi
i2.emph();
sono arrivato fino a questo:
max_word_count = 412 # should count from list
min_word_count = 44 # should count from list
difference = max_word_count - min_word_count
min_weight = 99 / difference * min_word_count
for each tag
weight = 99 / difference * this_word_count - min_weight + 1
Il che mi ha dato ha pesato le parole tra 1 e 100. Funziona perfettamente per me in znaci.net/arhiv.
NOTA BENE:. Io non sono bravo in matematica