2017-09-10 5 views
1

J'essaie de colorer les cercles en fonction d'une donnée .csv, colonne "COLOR". La "couleur" comprend "rouge", "jaune", "vert" -mais en ce moment les couleurs ne sont pas transféraient ... juste la valeur par défaut noir ...Les données couleur CSV ne sont pas affichées

var col = function(d) {return d.COLOR}; 

svg.selectAll(".dot") 
     .data(data) 
    .enter().append("circle") 
     .attr("class", "dot") 
     .attr("r", 15) 
     .attr("cx", xMap) 
     .attr("cy", yMap) 
     .style("fill", col) 
     .style("opacity", ".5") 
     .on("mouseover", function(d) { 
      tooltip.transition() 
       .duration(200) 
       .style("opacity", .9); 
      tooltip.html(d["Cereal Name"] + "<br/> (" + xValue(d) 
      + ", " + yValue(d) + ")") 
       .style("left", (d3.event.pageX + 5) + "px") 
       .style("top", (d3.event.pageY - 28) + "px"); 

data.forEach(function(d) { 
    d.POPULATION = +d.POPULATION; 
    d.REVENUE = +d.REVENUE; 
    d.COLOR = +d.COLOR; 

enter image description here

enter image description here

+0

Pouvez-vous fournir une démo? – Ofisora

+0

Je ne vois aucun problème dans ceci ... une possibilité pourrait être que 'd.COLOR' n'est pas présent dans les données. – Cyril

+0

@cyril: J'ai ajouté un peu plus de détail montrant le fichier csv respectif avec le code qui extrait les données COLOR du fichier. Est-ce que j'ai râté quelque chose? Merci! – aiwan

Répondre

3

Vos valeurs COLOR dans votre fichier CSV contiennent des guillemets " qui feront partie des chaînes analysées dans data. Par conséquent, vous vous retrouvez avec des valeurs d'attribut comme fill=""yellow"" qui n'est pas valide. Par conséquent, la couleur par défaut noir. Un moyen de contourner cela pourrait être de se débarrasser des guillemets dans le fichier CSV lui-même. Si cela est impossible, vous pouvez ajuster votre fonction accesseur couleur col à quelque chose comme ce qui suit:

var col = function(d) {return d.COLOR.substring(1, d.COLOR.length - 1)}; 

Jetez un oeil à cette démo de travail:

var data = [{ COLOR: '"yellow"'}]; 
 

 
var col = function(d) { return d.COLOR.substring(1, d.COLOR.length - 1); }; 
 

 
d3.select("body").append("svg") 
 
    .selectAll("circle") 
 
    .data(data) 
 
    .enter().append("circle") 
 
    .attr("cx", 100) 
 
    .attr("cy", 100) 
 
    .attr("r", 10) 
 
    .attr("fill", col);
<script src="https://d3js.org/d3.v4.js"></script>