J'ai une plage de temps courte tdébut - tfin (≈ 90 secondes) et une liste de points dans le temps qui représentent les événements qui se sont produits à ce point. Je suis à la recherche d'une visualisation concise de ces événements qui montre (a) le nombre d'événements et (b) les modèles comme les clusters ou un biais pour un certain point.
Mes idées jusqu'à présent:
(Désolé pour la qualité d'image terrible)
Des commentaires ou d'autres idées?
Question bonus: comment étendre ces idées si les événements appartiennent à un petit nombre (<10) de catégories différentes?
Vous pouvez faire une chronologie simple avec un histogramme pour atteindre votre résultat final. Les cases individuelles sont des événements et la hauteur de l'histogramme vous indique le regroupement et le pic sur des périodes individuelles.
Si vos données ne sont pas discrètes et sont continues, vous pouvez utiliser un graphique linéaire ou un graphique en aires .
télécharger la source bmml - Wireframes créés avec Balsamiq Mockups
Je vais affiner la réponse en fonction de vos commentaires.
En jouant un peu sur les réponses de rk, je regrouperais visuellement les événements par un morceau de métadonnées, comme
télécharger la source bmml - Wireframes créés avec Balsamiq Mockups
Cette approche échouera avec des problèmes d'échelle, et est certainement plus intensive en termes de développement. Prioriser par la valeur commerciale d'un tel clustering.
Je recommande d'utiliser une combinaison des deux premières images, en particulier la seconde. Il s'agit essentiellement d'un 1D carte thermique .
Il est assez facile d'en créer un en utilisant HTML, CSS et JS:
<!-- HTML -->
<div class="bar"></div>
/* CSS */
.bar {
height:30px;
border:1px darkgray solid;
width:500px;
position:relative;
overflow:hidden;
}
.bar span {
width:10px;
height:30px;
background-image:linear-gradient(to right, transparent, red, transparent);
position:absolute;
top:0;
}
// JS
function HeatBar(bar){
this._bar = bar;
}
HeatBar.prototype.createTick = function(/* float{0,1} */ atOffset, opacity){
var bw = this._bar.offsetWidth * atOffset;
var el = document.createElement("span");
el.style.opacity = opacity;
el.style.left = bw + "px";
this._bar.appendChild(el);
};
var barElem = document.querySelector(".bar"),
bar = new HeatBar(barElem),
numTotal = 50;
for(var x = 0; x < numTotal; x++)
bar.createTick(Math.random(), 10/numTotal);
Vous pouvez également ajouter des fonctionnalités pour afficher uniquement les lignes sans dégradé au clic si vous le souhaitez, qui ressemble à ceci.
Le code supplémentaire:
/* CSS */
.removeGradient span {
background-image:none;
background-color:red;
transform:scaleX(.2);
}
// JS
barElem.addEventListener('mousedown', function() {
this.classList.add("removeGradient");
}, false);
barElem.addEventListener('mouseup', function() {
this.classList.remove("removeGradient");
}, false);
Vous pouvez également les superposer pour afficher différents événements en utilisant plusieurs .bar
éléments empilés les uns sur les autres (en utilisant la position absolute
et la couleur changée) ou changez simplement la couleur des lignes sur un .bar
élément utilisant une logique JS qui finirait par ressembler à this :
Vous pouvez créer une carte temporelle, qui est un nuage de points montrant les temps entre les événements suivants. Chaque point du nuage de points représente un événement dans le temps. La coordonnée x d'un événement est le temps entre l'événement lui-même et l'événement précédent. La coordonnée y est le temps entre l'événement lui-même et l'événement suivant. Voir quelques exemples sympas ici:
https://districtdatalabs.silvrback.com/time-maps-visualizing-discrete-events-across-many-timescales