Question

J'ai une application qui est essentiellement un calendrier, les utilisateurs peuvent entrer des événements pour chaque jour. Maintenant, je dois trouver la meilleure façon de montrer le calendrier pour un mois complet tout en mettant en valeur les jours les plus chargés.

Il est évident que la couleur est le choix ici, mais je me demande comment vous les gars le ferait. J'ai réfléchi ce qui suit:

  • Obtenir les événements max pour une journée et à partir de là, le diviser par le nombre de couleurs disponibles. Donc, si un jour eu 30 événements et nous avons 3 couleurs, la première serait de 0 à 9, ce qui suit du 10 au 19 et le dernier de 20 sur.
  • Trouvez la average et le diviser par colors/2, donc si la moyenne est de 10 événements et nous avons 3 couleurs, le calcul serait de 10 / 1,5 = 6,66 ce qui signifie que la première gamme de couleurs sera être de 0 à 6,66, la deuxième 6,67 à 13,32 et le dernier de 13,33 sur.

Cependant, je ne suis pas sûr que ce serait la meilleure façon de résoudre ce problème. Les deux sont linéaires et le premier pourrait gâcher les choses un peu si notre moyenne est d'environ 20 et le maximum avait 100 événements, juste deux couleurs seront leur apparition.

Je ne suis pas staticien, mais je pense que ce problème pourrait être résolu avec centiles et quartiles, mais je ne suis pas vraiment sûr de savoir comment le mettre en œuvre.

Merci.

Était-ce utile?

La solution

Je suggère un algorithme pour une distribution logarthmic qui est souvent utilisé pour la construction de nuages ??de tags. Les balises sont vos jours, le nombre de balises sont le nombre d'événements pour une journée.

Une bonne mise en œuvre pour PHP et Python (non vérifié correctement encore) semble être celui-ci . Voici un exemple:

$tags = array(
    array('tag'   => 1,
          'count' => 10),
    array('tag'   => 2,
          'count' => 30),
    array('tag'   => 3,
          'count' => 5),
    array('tag'   => 4,
          'count' => 5));
$colours = array('green', 'yellow', 'red');
foreach(tagcloud($tags, 0, count($colours) - 1, 0) as $d) {
  echo  '<div style="background-color:' . $colours[floor($d['size'])] . '">Day: '.$d['tag'].' Events: '.$d['count'].'</div>';
}

Autres conseils

Quelques idées:

  1. Assurer une répartition uniforme des couleurs: Commander les événements N / jour et attribuer un nombre égal de jours à chaque couleur
  2. Carte les événements N / jour à une valeur dans une gamme de couleurs en continu au lieu d'utiliser des seaux discrets. Par exemple, de 0 à MAX (événements) à une valeur RVB.
  3. Trouver une distribution non linéaire - par exemple, normale, exponentielle, etc. La formule que vous cherchez est le CDF (voir http://en.wikipedia.org/wiki/Cumulative_distribution_function ) qui peut être utilisé pour convertir le nombre d'événements / jour à un percentile.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top