L'Amélioration De La D3 Séquence Sunburst Exemple
Ce D3
exemple été mon point de départ:
http://bl.ocks.org/kerryrodden/7090426
Je voulais changer les données qui alimente le diagramme, et j'ai fait en suivant un nouvel exemple:
On peut remarquer au moins deux problèmes:
- Légende est fausse. C'est parce qu'il contient encore 'codé en dur' des noms à partir de l'original exemple.
- Tous les nœuds sont de couleur noire. C'est parce que le schéma de couleur est aussi "codé en dur" uniquement pour les noms de nœud à partir de l'original exemple.
Comment améliorer l'exemple d'origine (ou mon jsfiddle, il n'a pas d'importance), de sorte que la légende et la coloration sont auto-ajustée sur les données qui alimente le diagramme?
- Pour la gestion de ces couleurs, je les traitons here, au moins à un certain degré. Il est basé sur le tableau des types de page qui pourrait être constitué de tous les noms. Il est limité à un nombre relativement restreint de types de page si. Dans tous les cas, prendre un coup d'oeil.
- +1 pour l'utilisation des gifs.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une échelle ordinale à la carte des couleurs pour les différents noms de nœud. La mise en œuvre, il n'aurait besoin que d'apporter quelques modifications mineures à votre code existant.
L'étape 1. Créer une échelle ordinale pour les couleurs
Au lieu d'avoir
colors
être simplement une liste de noms de couleur, codée en dur à des noms spécifiques, l'utilisationd3.l'échelle.ordinal()
, et de définir la.range()
être un tableau de couleurs que vous souhaitez utiliser. Par exemple:Cela permettrait de créer une échelle ordinale qui utilise les mêmes couleurs que l'original de visualisation. Vos données aurait besoin de plus de couleurs, vous voulez ajouter un peu plus à votre portée, sinon les couleurs sont répétés.
Comme un raccourci, vous pouvez utiliser
d3.l'échelle.category20()
laisser d3 choisir une plage de 20 catégorique couleurs pour vous.Maintenant lors du réglage des couleurs de remplissage pour votre
path
élément arcs et aussi votre chapelure, vous pouvez tout simplement utilisercolors(d.name)
au lieu decolors[d.name]
.L'étape 2. L'utilisation de vos données pour construire le domaine de l'échelle
La
.domain()
de cette envergure seront fixées une fois que nous avons données, car il dépendra de la liste des noms uniques contenues dans les données. Pour ce faire, vous pouvez parcourir les données, et de créer un tableau de noms uniques. Il y a sans doute plusieurs façons de le faire, mais voici un qui fonctionne bien:Cela crée un tableau vide, puis une boucle sur chaque élément de la
nodes
tableau et si le nom du noeud n'existe pas déjà dans le nouveau tableau, il est ajouté.Ensuite, vous pouvez simplement définir le nouveau tableau pour être le domaine de l'échelle de couleurs:
L'étape 3. Utilisez l'échelle du domaine pour construire la légende
Depuis la légende, va dépendre le domaine, assurez-vous que le
drawLegend()
fonction est appelée après que le domaine est défini.Vous pouvez trouver le nombre d'éléments dans le domaine (pour le réglage de la hauteur de la légende) en appelant
colors.domain().length
. Ensuite, pour la légende du.data()
, vous pouvez utiliser le domaine lui-même. Enfin, pour définir la couleur de remplissage des boîtes de légende, vous appelez à l'échelle des couleurs surd
étant donné que chaque élément dans le domaine est unname
. Voici ce que ces trois changements à la légende dans la pratique:Et c'est à ce sujet. Espérons que cela aide.
Voici la mise à jour JSFiddle.