使用d3.js

时间:2016-07-22 13:27:57

标签: javascript d3.js svg line

我的情况非常类似于JSFiddle中的情况,其中一些点代表一个团队(特别是它在足球赛季的最终排名)。

我想用这些点中的一条线代替这些点,以便最终结果显示每个团队在最终排名位置方面的时间演变。

我知道如何通过设置X1,X2,Y1,Y2坐标创建一条线,但我不明白如何将此坐标设置为精确值(例如,如果该线在2006-2007赛季和2007-2008赛季之间我必须将X1Y1与第一季的值d[0]d[1]设置为X2Y2我需要值来自数组中的下一个元素。

我对D3.js很新,所以非常欢迎任何建议和解决方案。感谢

2 个答案:

答案 0 :(得分:1)

假设您已经为线条声明了一些数据,根据该数据绘制实际线条就像这样简单:

  1. 创建X和Y比例:

    var xScale = d3.scale.linear().domain([dataRange.x1, dataRange.x2]).range([plotRange.x1, plotRange.x2]);
    var yScale = d3.scale.linear().domain([dataRange.y1, dataRange.y2]).range([plotRange.y1, plotRange.y2]);
    
  2. 声明行函数:

    var valueLine = d3.svg.line()
    .x(function (dataItem, arrayIndex) {
        return xScale(dataItem);
    })
    .y(function (dataItem, arrayIndex) {
        return yScale(dataItem)
    });
    
  3. 最后创建路径:

    g.append("path")
        .style("stroke", someColour)
        .attr("d", valueLine(myData))
        .attr("class", "someClass");
    
  4. 请参阅此处的更多文档:https://www.dashingd3js.com/

答案 1 :(得分:0)

基于那个小提琴,这就是我要做的事情:

首先,我会为每个团队的圈子(team1,team2等等)设置一个班级。所以,我以后可以为每个团队检索圈子的值。

为了检索圆圈值,我会使用for循环:

for(var j = 1; j < 4; j++){//this loops from "Team1" to "Team3"
var team = d3.selectAll("circle.Team" + j)[0];//selects the team by class
    for(var i = 0; i < team.length; i++){//this loops through the circles
        if(team[i+1]){//if the next circle exists
            svg.append("line")
                .attr("x1", d3.select(team[i]).attr("cx"))//this circle
                .attr("y1", d3.select(team[i]).attr("cy"))//this circle
                .attr("x2", d3.select(team[i+1]).attr("cx"))//the next circle
                .attr("y2", d3.select(team[i+1]).attr("cy"))//the next circle
                .attr("stroke", function(){
                    return _TEAM_COLORS_["Team" + j]
                });//sets the colours based on your object
        }
    }
};

这是小提琴,更新:https://jsfiddle.net/gerardofurtado/6cc0ehz2/18/