Dans d3.js, ignorez append () pour les données nulles
Je suis en dessinant une ligne graphique hors du petit cercle des balles. Cependant, les données de trous, qui sont représentés par la valeur null dans mon tableau. Naturellement, là où il n'y a pas de données, il ne devrait pas être cercles. Mais d3 append() méthode ajoute eux de toute façon. Comment puis-je éviter cela?
Voici un jsFiddle maquette reproduire mon problème exactement.
Je suis intéressé à ne PAS avoir cette série de cercles qui se trouvent sur l'axe des X de mon graphe, car ceux-ci sont tous nuls.
Pertinents du code de la jsfiddle lien:
svg.selectAll('circle').data(values).enter()
.append('circle')//<-- I don't want to do this for null's
.attr('fill', '#c00')
.attr('r', 3)
.attr('cx', xi)
.attr('cy', yFlipped)
source d'informationauteur meetamit
Vous devez vous connecter pour publier un commentaire.
Une option est de représenter vos données différemment, de sorte que vous ne sont pas dépendantes de l'indice pour calculer l'abscisse. Par exemple, si vous représenté chaque donnée comme un objet (par exemple,
{x: 0, y: 0.2840042}
), alors on peut calculer les coordonnées x commex(d.x)
plutôt quex(i)
.Une autre option serait de créer un rayon de zéro lorsque la valeur est nulle, de sorte que les cercles sont cachés:
circle.attr("r", function(d) { return d == null ? 0 : 3; })
. Ou, vous pouvez masquer les cercles:circle.style("display", function(d) { return d == null ? "none" : null; })
.Vous pouvez également supprimer les éléments null après l'ajout:
circle.filter(function(d) { return d == null; }).remove()
. Qui serait à l'œuvre pour la création initiale, mais je ne le recommande pas, car l'index pourrait changer si vous resélectionnés les éléments plus tard.Essayer ce modèle, qui peut soit supprimer ou masquer vos cercles.
L'option la plus simple est de filtrer les valeurs null de la transmission des données à
.data(…)
augmentant les données pour maintenir l'index:Notez que vous pouvez également suivre ce modèle de sous-éléments, même si elles ne sont pas naturellement des listes. Par exemple, considérons une situation où vous voulez conditionnelle, ajouter un deuxième cercle:
Violon: http://jsfiddle.net/3d6e648k/
Ici est une façon, si vous voulez ne jamais ajouter dans la première place. J'ai utilisé une instruction if à l'intérieur d'un .each() et puis la d3.sélectionnez(ce) à ajouter à l'élément courant.
Voici une corbeille de http://jsbin.com/qojifug/edit?js,sortie
Juste de filtrer.