D3: qu'est Ce qu'une Bissectrice?
Je cherche à faire des graphiques avec D3, et je suis tombé sur le d3.bissectrice
. Cependant, je ne comprends pas ce qu'il est ou fait à partir de la documentation.
Presque tous les exemples que j'ai trouver dans le web d'utiliser une Date de tableau, semblable à l'exemple dans la documentation officielle:
var data = [
{date: new Date(2011, 1, 1), value: 0.5},
{date: new Date(2011, 2, 1), value: 0.6},
{date: new Date(2011, 3, 1), value: 0.7},
{date: new Date(2011, 4, 1), value: 0.8}
];
var bisect = d3.bisector(function(d) { return d.date; }).right;
Donc, quelle est la bissectrice faire, en plus de la cueillette de la date d'objet à partir d'éléments du tableau? Ce qui ne l' *.right
retour?
Et est-il de toute utilisation si j'ai un simple 1-tableau unidimensionnel, comme var data = [3, 6, 2, 7, 5, 4, 8]
?
Merci pour ces éclaircissements moi.
Vous devez vous connecter pour publier un commentaire.
L'idée sous-jacente derrière
bisect
est-ce:Considérer le tableau que vous mentionnez -
var data = [3, 6, 2, 7, 5, 4, 8]
Vous souhaitez insérer une nouvelle valeur, disons
3.5
endata
tableau et veulent savoir comment 'partition' il. En d'autres termes, vous voulez savoir ce que serait l'indice de3.5
si elle était insérée lorsquedata
tableau est trié.Il y a des situations où vous voudriez savoir comment l'insertion de l'élément 'coupe' ou 'divise' un tableau. Dans ce cas, vous voulez d'abord trier ce tableau et de faire ce que nous appelons un Recherche Binaire pour trouver la bonne position pour l'insertion de cet élément.
bisectLeft
etbisectRight
prendre soin de préciser l'anomalie dans une situation où vous voulez entrer un élément qui existe déjà dans le tableau. Disons que vous voulez entrer dans un autre3
dans le tableau. Il y a deux situations:Donc dépendant de la façon dont nous prenons soin de cette ambiguïté, nous pouvons entrer dans l'élément de la "gauche" ou "droite" de l'élément déjà existant. À partir de la docs (Marque de l'accent):
Dans
bisectLeft
nous obtenons 1 comme l'index adéquat, toutes les entrées en double sera être sur le droit de l'index et la situation est exactement l'inverse dansbisecRight
.Maintenant que vous savez comment
bisectLeft
etbisectRight
travail, labisector
nous permet juste de définir une coutumecomparator
ouaccessor
de la fonction de partition des valeurs ou de donner un sens à < et > sur des objets aussi bien.Donc ce morceau de code:
Juste spécifie l'utilisation du
bisectRight
option et revenir un index adéquat pour l'insertion d'un élément en supposant que le tableau est trié par ordre croissant).Donc, si je devais construire sur votre exemple, et en supposant un
bisector
nommébisect
. Et vous n'avez:J'espère que ça clarifie les choses et vous avez commencé dans la bonne direction.
À partir de la documentation (que vous avez lié à):
Que ce qu'il fait. Il vous indique où un nouvel élément doit être inséré à toujours avoir un tableau trié par la suite. Le tableau peut être tout type de structure, qui est pourquoi il y a une fonction d'accès qui vous permet de "décomposer" de cette structure pour les fins de la recherche.
La différence entre la gauche et la droite coupe est où le point d'insertion à l'est (vers la gauche ou la droite de l'élément le plus proche) -- si le tableau est trié en ordre croissant ou décroissant.
Un cas d'utilisation pour les bissectrices est l'endroit où vous voulez mettre en valeur le plus proche point de données lors du déplacement de la souris sur un graphique, voir, par exemple,cet exemple.