2016-06-28 17 views
1

私は現在、コードに入れられたデータに基づいて増加する水平バーの形でデータを示すバーグラフを作成しています。私がここでやろうとしているのは、データが表示され、データが変わったときにバーの横にテキストを表示することです。私は既にデータを表示するリスナーを作成しましたが、データを表示および変更する方法がわかりません。 私のバーの最後にテキストを追加する - D3

あなたがデータを見ることができるように

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta> 
 
    <meta name="description" content="Drawing Shapes w/ D3 - " /> 
 
    <meta charset="utf-8"> 
 
    <title>Resources per Project</title> 
 
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> 
 

 
    <style type="text/css"> 
 
    h1 { 
 
     font-size: 35px; 
 
     color: darkgrey; 
 
     font-family: Helvetica; 
 
     border-bottom-width: 3px; 
 
     border-bottom-style: dashed; 
 
     border-bottom-color: black; 
 
    } 
 
    
 
    h2 { 
 
     font-size: 20px; 
 
     color: black; 
 
     font-family: Helvetica; 
 
     text-decoration: underline; 
 
     margin-left: 350px; 
 
     margin-top: 0px; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <h1>Resources used per Project</h1> 
 

 
    <p>Choose Month: 
 
    <select id="label-option"> 
 
     <option value="April">April</option> 
 
     <option value="May">May</option> 
 
     <option value="June">June</option> 
 
     <option value="July">July</option> 
 
     <option value="August">August</option> 
 
     <option value="September">September</option> 
 
    </select> 
 
    <script type="text/javascript"> 
 
     var width = 800 
 
     var height = 500 
 
     var emptyVar = 0 
 
     var dataArrayProjects = ['2G', 'An', 'At', 'Au', 'AW', 'Ch', 'CI', 'CN'] 
 
     var April = [0.35, 1.66, 3.04, 1.54, 3.45, 2.56, 2.29, 1.37] 
 
     var May = [0.36, 1.69, 3.08, 1.54, 3.62, 2.61, 2.22, 1.44] 
 
     var June = [0.34, 1.7, 3.08, 1.63, 3.66, 2.68, 2.24, 1.51] 
 
     var July = [0.3, 1.72, 3.17, 1.67, 3.56, 2.56, 2.17, 1.44] 
 
     var August = [0.28, 1.79, 3.18, 1.71, 3.62, 2.73, 2.26, 1.54] 
 
     var September = [1.23, 1.74, 3.12, 1.61, 3.66, 2.71, 2.2, 1.48] 
 

 
     d3.select("#label-option").on("change", change) 
 

 
     function change() { 
 
     var data = April; 
 
     if (this.selectedIndex == 1){ 
 
      data = May; 
 
     } else if (this.selectedIndex == 2){ 
 
      data = June; 
 
     } else if (this.selectedIndex == 3){ 
 
      data = July; 
 
     } else if (this.selectedIndex == 4){ 
 
      data = August; 
 
     } else if (this.selectedIndex == 5){ 
 
      data = September; 
 
     } 
 
     canvas.selectAll("rect") 
 
     .data(data) 
 
     .attr("width", emptyVar) 
 
     .attr("height", 50) 
 
     .attr("fill", function(d) { 
 
      return color(d) 
 
     }) 
 
     .attr("y", function(d, i) { 
 
      return i * 55 
 
     }) 
 

 
     bars.transition() 
 
     .duration(1500) 
 
     .delay(200) 
 
     .attr("width", function(d) { 
 
      return widthScale(d); 
 
     })   
 
     } 
 

 
     var widthScale = d3.scale.linear() 
 
     .domain([0, 4]) 
 
     .range([0, width - 60]); 
 

 
     var heightScale = d3.scale.ordinal() 
 
     .domain(dataArrayProjects) 
 
     .rangePoints([10, height - 85]); 
 

 
     var color = d3.scale.linear() 
 
     .domain([0, 4]) 
 
     .range(["#000033", "#22cdff"]) 
 

 
     var xAxis = d3.svg.axis() 
 
     .ticks("30") 
 
     .scale(widthScale); 
 

 
     var yAxis = d3.svg.axis() 
 
     .scale(heightScale) 
 
     .orient("left"); 
 

 
     var canvas = d3.select("body") 
 
     .append("svg") 
 
     .attr("width", width) 
 
     .attr("height", height) 
 
     .append("g") 
 
     .attr("transform", "translate(40, 0)"); 
 

 
     var bars = canvas.selectAll("rect") 
 
     .data(April) 
 
     .enter() 
 
     .append("rect") 
 
     .attr("width", emptyVar) 
 
     .attr("height", 50) 
 
     .attr("fill", function(d) { 
 
      return color(d) 
 
     }) 
 
     .attr("y", function(d, i) { 
 
      return i * 55 
 
     }) 
 
     
 
     canvas.append("g") 
 
     .attr("transform", "translate(0, 430)") 
 
     .attr("font-family", "Helvetica") 
 
     .attr("font-size", "15px") 
 
     .call(xAxis); 
 

 
     canvas.append("g") 
 
     .attr("font-family", "Helvetica") 
 
     .attr("font-size", "15px") 
 
     .style("fill", "black") 
 
     .attr("class", "y axis") 
 
     .call(yAxis); 
 

 
     bars.transition() 
 
     .duration(1500) 
 
     .delay(200) 
 
     .attr("width", function(d) { 
 
      return widthScale(d); 
 
     }) 
 

 
     var yAxisLine = canvas.append("line") 
 
         .attr("x1", -3) 
 
         .attr("y1", 0) 
 
         .attr("x2", -3) 
 
         .attr("y2", 436) 
 
         .attr("stroke-width", 6) 
 
         .attr("stroke", "black"); 
 

 
     canvas.selectAll("text") 
 
     .data(April) 
 
     .enter() 
 
      .append("text") 
 
       .text(function(d) { 
 
      return April; 
 
    }) 
 
     .attr("x", function(d, i) { 
 
     return i * (width/April.length); 
 
    }) 
 
     .attr("y", function(d) { 
 
     return height - (April * 4); 
 
    }); 
 

 

 
    </script> 
 
    <h2>Resources</h2> 
 
</body> 
 
</html>

は、データ内の正確な数を知らなくても理解して読みやすくし、難しいことではありません。表示されているデータの正確な量を示すバーの隣に数字を表示するにはどうすればよいですか。私はd3.jsにはあまり良くないので、ほかのグラフも理解していないので、他の棒グラフと独自のツールチップをリンクしないでください。

答えて

1

は、あなたは以下のように最初に作成したラベルでそれを達成することができます

var texts = canvas.selectAll(".label")//select all DOMs with class label. 
     .data(April) 
     .enter() 
     .append("text") 
     .attr("class", "label") 
     .attr("x", function(d) { 
      return widthScale(d) + 10;//x location of the label 
     }) 
     .attr("fill", function(d) { 
      return color(d) 
     }) 
     .attr("y", function(d, i) { 
      return (i * 55) + 25; //y location of the label 
     }) 
     .text(function(d, i) { 
      return d; 
     }) 

は最後に更新部にラベルを更新するには、次ありません。

texts = canvas.selectAll(".label") 
    .data(data) 
    .attr("x", function(d) { 
     return widthScale(d) + 10; 
    }) 
    .attr("fill", function(d) { 
     return color(d) 
    }) 
    .attr("y", function(d, i) { 
     return (i * 55) + 25 
    }) 
    .text(function(d, i) { 
     return d; 
    })   

作業コードhere

関連する問題