2014-07-09 38 views
0

我正在嘗試複製Multi-Series Line Chart example,但我無法將標籤顯示在行尾或根本就不存在。代碼基本上與示例中的代碼完全相同,但幾個字改變了。該數據集是縣人口,格式與示例中相同,最早的日期在列表頂部,最近的日期在列表底部。多線圖標籤 - D3.js

任何人都能看到我失蹤的任何東西?

var margin = {top: 20, right: 80, bottom: 30, left: 50}, 
    width = 960 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom; 

var parseDate = d3.time.format("%Y%m%d").parse; 

var x = d3.time.scale() 
    .range([0, width]); 

var y = d3.scale.linear() 
    .range([height, 0]); 

var color = d3.scale.category10(); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom"); 

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

var line = d3.svg.line() 
    .interpolate("basis") 
    .x(function(d) { return x(d.date); }) 
    .y(function(d) { return y(d.population); }); 

var svg = d3.select("body").append("svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

d3.csv("historicalpopulationTest.csv", function(error, data) { 
    color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; })); 

    data.forEach(function(d) { 
    d.date = parseDate(d.date); 
    }); 

    var counties = color.domain().map(function(name) { 
    return { 
     name: name, 
     values: data.map(function(d) { 
     return {date: d.date, population: +d[name]}; 
     }) 
    }; 
    }); 

    x.domain(d3.extent(data, function(d) { return d.date; })); 

    y.domain([ 
    d3.min(counties, function(c) { return d3.min(c.values, function(v) { return v.population; }); }), 
    d3.max(counties, function(c) { return d3.max(c.values, function(v) { return v.population; }); }) 
    ]); 

    svg.append("g") 
     .attr("class", "x axis") 
     .attr("transform", "translate(0," + height + ")") 
     .call(xAxis) 
    .append("text") 
     .attr("x", width) 
     .attr("y", 6) 
     .attr("dy", ".71em") 
     .style("text-anchor", "end") 
     .text("Year"); 

    svg.append("g") 
     .attr("class", "y axis") 
     .call(yAxis) 
    .append("text") 
     .attr("transform", "rotate(-90)") 
     .attr("y", 6) 
     .attr("dy", ".71em") 
     .style("text-anchor", "end") 
     .text("Population"); 

    var county = svg.selectAll(".county") 
     .data(counties) 
    .enter().append("g") 
     .attr("class", "county"); 

    county.append("path") 
     .attr("class", "line") 
     .attr("d", function(d) { return line(d.values); }) 
     .style("stroke", function(d) { return color(d.name); }); 

    county.append("text") 
     .datum(function(d) { return {name: d.name, value: d.values[d.values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.population) + ")"; }) 
     .attr("x", width) 
     .attr("dy", ".35em") 
     .text(function(d) { return d.name; }); 

}); 

圖形看起來像這樣

enter image description here

回答

3

我覺得你的問題是在下面的代碼

county.append("text") 
    .datum(function(d) { return {name: d.name, value: d.values[d.values.length - 1]}; }) 
    .attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.population) + ")"; }) 
    .attr("x", width) 
    .attr("dy", ".35em") 
    .text(function(d) { return d.name; }); 

我還沒有運行您的代碼,但它看起來像你將文本轉換爲行尾,然後將x位置移動一個額外的「寬度」像素數。

嘗試將.attr("x", width)更改爲。 attr("x", 3)

+0

謝謝!我以爲我已經將我的代碼改回.attr(「x」,3),但我沒有。這解決了它。 – bailey