Javascript 如何在d3折线图中的直线上创建点(散点图)

Javascript 如何在d3折线图中的直线上创建点(散点图),javascript,json,d3.js,svg,Javascript,Json,D3.js,Svg,我的代码运行良好,但行上的第一个点有问题。第一个点始终获得y=2和x=1的位置,但其他点的位置正确。请帮我把第一个点放在正确的地方 图表:- 图形的JSON数据:- var data = [{ "label": "Execution: 6 - defadmin@gmail.com", "x": [1, 2, 3, 4, 5, 6], "y": [2, 1, 1, 1, 1, 1], "xAxisD

我的代码运行良好,但行上的第一个点有问题。第一个点始终获得y=2和x=1的位置,但其他点的位置正确。请帮我把第一个点放在正确的地方

图表:-

图形的JSON数据:-

  var data = [{
            "label": "Execution: 6 - defadmin@gmail.com",
            "x": [1, 2, 3, 4, 5, 6],
            "y": [2, 1, 1, 1, 1, 1],
            "xAxisDisplayData": ["1", "2", "3", "4", "5", "6"]
          }];
这是我关于点创建的代码

  // Set the ranges
  var x = d3.time.scale().range([0, innerwidth]);
  var y = d3.scale.linear().range([innerheight, 0]);

  // Scale the range of the data
  x.domain(d3.extent(datasets[0]['x'], function (d, i) {

     return datasets[0]['x'][i];
  }));
  y.domain([1, d3.max(datasets[0]['y'], function (d, i) {
     return datasets[0]['y'][i];
  })]);

  // Add the scatterplot
  svg.selectAll("dot")
     .data(datasets[0]['x'])
     .enter().append("circle")
     .attr("r", 3.5)
     .attr("cx", function (d, i) {
     return x(datasets[0]['x'][i]);
  })
  .attr("cy", function (d, i) {

     return y(datasets[0]['y'][i]);
  });
更新1:完整代码

                        function createLineChart(data, number) {

                //            var data = [ { label: "Execution 1 - buddhika@gmail.com",
                //                x: [1,2,3,4,5,6],
                //                y: [2,1,1,1,1,1] }] ;


                            var widthForSVG;
                            var widthForChart;

                            if ((data[0]['x']).length < 13) {

                                widthForSVG = 1220;
                                widthForChart = 960;

                            } else {


                                widthForSVG = (((data[0]['x']).length - 12) * 80) + 1220;
                                widthForChart = (((data[0]['x']).length - 12) * 80) + 960;

                            }


                            var xy_chart = d3_xy_chart()
                                    .width(widthForChart)
                                    .height(500)
                                    .xlabel("TCS")
                                    .ylabel("STATUS");


                            // creating main svg
                            var svg = d3.select(".lineChartDiv" + number).append("svg")
                                    .datum(data)
                                    .call(xy_chart)
                                    .attr("class", "lineChart" + number)
                                    .attr('width', widthForSVG);


                            function d3_xy_chart() {
                                //1220px  for 12 steps in svg
                                var width = widthForChart,
                                        height = 480,
                                        xlabel = "X Axis Label",
                                        ylabel = "Y Axis Label";


                                function chart(selection, svg) {

                                    var numberNUmber = 0;
                                    selection.each(function (datasets) {
                                        //
                                        // Create the plot.
                                        //


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


                                        // Set the ranges



                                        var x_scale = d3.scale.linear()
                                                .range([0, innerwidth])
                                                .domain([d3.min(datasets, function (d) {


                                                    return d3.min(d.x);
                                                }),
                                                    d3.max(datasets, function (d) {

                                                        return d3.max(d.x);
                                                    })]);


                                        var y_scale = d3.scale.linear()
                                                .range([innerheight, 0])
                                                .domain([d3.min(datasets, function (d) {

                                                    return 1;
                                                }),
                                                    d3.max(datasets, function (d) {
                                                        // d3.max(d.y)
                                                        return 3;
                                                    })]);

                                        var color_scale = d3.scale.category10()
                                                .domain(d3.range(datasets.length));

                                        var x_axis = d3.svg.axis()
                                                .scale(x_scale)
                                                .orient("bottom")
                                                .tickFormat(function (d, i) {


                                                    if (d % 1 == 0) {

                                                        return parseInt(datasets[0]['xAxisDisplayData'][i])

                                                    } else {

                                                        return "  "

                                                    }

                                                })
                                                .ticks(d3.max(datasets, function (d) {

                                                    return d3.max(d.x);
                                                }));



                                        var y_axis = d3.svg.axis()
                                                .scale(y_scale)
                                                .orient("left")
                                                .ticks(d3.max(datasets, function (d) {

                                                    return d3.max(d.y);
                                                }))
                                                .tickFormat(function (d, i) {


                                                    if (d == "1") {

                                                        return "NOT EXECUTED"

                                                    } else if (d == "2") {

                                                        return "FAILED"

                                                    } else if (d == "3") {

                                                        return "PASSED"

                                                    } else {

                                                        return "  "

                                                    }

                                                });

                                        var x_grid = d3.svg.axis()
                                                .scale(x_scale)
                                                .orient("bottom")
                                                .tickSize(-innerheight)
                                                .ticks(d3.max(datasets, function (d) {
                                                    // d3.max(d.y)
                                                    return d3.max(d.x);
                                                }))
                                                .tickFormat("");

                                        var y_grid = d3.svg.axis()
                                                .scale(y_scale)
                                                .orient("left")
                                                .tickSize(-innerwidth)
                                                .tickFormat("")
                                                .ticks(d3.max(datasets, function (d) {

                                                    return d3.max(d.y);
                                                }));

                                        var draw_line = d3.svg.line()
                                                .interpolate("linear")
                                                .x(function (d) {

                                                    return x_scale(d[0]);
                                                })
                                                .y(function (d) {

                                                    return y_scale(d[1]);
                                                });

                                        var svg = d3.select(this)
                                                .attr("width", width)
                                                .attr("height", height)
                                                .append("g")
                                                .attr("transform", "translate(" + 90 + "," + margin.top + ")");

                                        svg.append("g")
                                                .attr("class", "x grid")
                                                .attr("transform", "translate(0," + innerheight + ")")
                                                .call(x_grid);

                                        svg.append("g")
                                                .attr("class", "y grid")
                                                .call(y_grid);

                                        svg.append("g")
                                                .attr("class", "x axis")
                                                .attr("transform", "translate(0," + innerheight + ")")
                                                .call(x_axis)
                                                .append("text")
                                                .attr("dy", "-.71em")
                                                .attr("x", innerwidth)
                                                .style("text-anchor", "end")
                                                .text(xlabel);

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


                                        var data_lines = svg.selectAll(".d3_xy_chart_line")
                                                .data(datasets.map(function (d) {

                                                    return d3.zip(d.x, d.y);
                                                }))
                                                .enter().append("g")
                                                .attr("class", "d3_xy_chart_line");


                                        data_lines.append("path")
                                                .attr("class", "line")
                                                .attr("d", function (d) {

                                                    return draw_line(d);
                                                })
                                                .attr("stroke", function (_, i) {
                                                    return color_scale(i);
                                                });

                                        data_lines.append("text")
                                                .datum(function (d, i) {
                                                    return {name: datasets[i].label, final: d[d.length - 1]};
                                                })
                                                .attr("transform", function (d) {
                                                    return ( "translate(" + x_scale(d.final[0]) + "," +
                                                    y_scale(d.final[1]) + ")" );
                                                })
                                                .attr("x", 3)
                                                .attr("dy", ".35em")
                                                .attr("fill", function (_, i) {
                                                    return color_scale(i);
                                                })
                                                .text(function (d) {
                                                    return d.name;
                                                });


                                        // Set the ranges
                                        var x = d3.time.scale().range([0, innerwidth]);
                                        var y = d3.scale.linear().range([innerheight, 0]);


                                        // Scale the range of the data
                                        x.domain(d3.extent(datasets[0]['x']));
                                        y.domain([1, d3.max(datasets[0]['y'])]);

                                        svg.selectAll("dot")
                                                .data(d3.zip(datasets[0].x, datasets[0].y))
                                                .enter().append("circle")
                                                .attr("r", 3.5)
                                                .attr("cx", function (d) {
                                                    return x(d[0]);
                                                })
                                                .attr("cy", function (d) {
                                                    return y(d[1]);
                                                });



                                    });
                                }

                                chart.width = function (value) {
                                    if (!arguments.length) return width;
                                    width = value;
                                    return chart;
                                };

                                chart.height = function (value) {
                                    if (!arguments.length) return height;
                                    height = value;
                                    return chart;
                                };

                                chart.xlabel = function (value) {
                                    if (!arguments.length) return xlabel;
                                    xlabel = value;
                                    return chart;
                                };

                                chart.ylabel = function (value) {
                                    if (!arguments.length) return ylabel;
                                    ylabel = value;
                                    return chart;
                                };

                                return chart;
                            }


                        }
函数createLineChart(数据、数字){
//var data=[{label:“执行1-buddhika@gmail.com",
//x:[1,2,3,4,5,6],
//y:[2,1,1,1,1,1]}];
Vg的var;
var图;
if((数据[0]['x'])。长度<13){
宽度fRSVG=1220;
宽度FORCHART=960;
}否则{
widthForSVG=((数据[0]['x'])。长度-12)*80)+1220;
宽度图表=((数据[0]['x'])。长度-12)*80)+960;
}
var xy_图表=d3_xy_图表()
.宽度(图表宽度)
.高度(500)
.xlabel(“TCS”)
.ylabel(“身份”);
//创建主svg
var svg=d3。选择(“.lineChartDiv”+数字)。追加(“svg”)
.基准(数据)
.呼叫(xy_图表)
.attr(“类别”、“线形图”+编号)
.attr('宽度')、widthForSVG;
函数d3_xy_图表(){
//1220px,用于svg中的12个步骤
var宽度=图表的宽度,
高度=480,
xlabel=“X轴标签”,
ylabel=“Y轴标签”;
功能图(选择,svg){
var numberNUmber=0;
选择。每个功能(数据集){
//
//创建绘图。
//
var margin={顶部:20,右侧:80,底部:30,左侧:50},
innerwidth=width-margin.left-margin.right,
innerheight=高度-margin.top-margin.bottom;
//设定范围
var x_scale=d3.scale.linear()
.range([0,innerwidth])
.domain([d3.min(数据集、函数(d)){
返回d3.min(d.x);
}),
d3.max(数据集、函数(d){
返回d3.max(d.x);
})]);
变量y_scale=d3.scale.linear()
.范围([innerheight,0])
.domain([d3.min(数据集、函数(d)){
返回1;
}),
d3.max(数据集、函数(d){
//d3.最大值(d.y)
返回3;
})]);
var color_scale=d3.scale.category10()
.域(d3.范围(数据集.长度));
var x_axis=d3.svg.axis()
.刻度(x_刻度)
.orient(“底部”)
.1格式(函数(d,i){
如果(d%1==0){
返回parseInt(数据集[0]['xAxisDisplayData'][i])
}否则{
返回“”
}
})
.ticks(d3.max)(数据集、函数(d){
返回d3.max(d.x);
}));
var y_axis=d3.svg.axis()
.比例(y_比例)
.东方(“左”)
.ticks(d3.max)(数据集、函数(d){
返回d3最大值(d.y);
}))
.1格式(函数(d,i){
如果(d=“1”){
返回“未执行”
}否则,如果(d==“2”){
返回“失败”
}否则,如果(d==“3”)
// Scale the range of the data
x.domain(d3.extent(datasets[0]['x']));
y.domain([1, d3.max(datasets[0]['y'])]);
// Add the scatterplot
svg.selectAll("dot")
  .data(d3.zip(datasets[0].x, datasets[0].y))
  .enter().append("circle")
    .attr("r", 3.5)
    .attr("cx", function (d) {
      return x(d[0]);
    })
    .attr("cy", function (d) {
      return y(d[1]);
    });
y.domain([1, d3.max(datasets[0]['y'])]);
y.domain([1, 3]);
           if(data[0]['y'][1]==1){

                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cx','0');
                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cy','225');


            }else if(data[0]['y'][1]==2){

                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cx','0');
                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cy','450');

            }else{

                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cx','0');
                document.getElementsByClassName(data[0]['label'])[0].setAttribute('cy','0');


            }
  var element = document.getElementsByClassName(data[0]['label']);

                            for (var i =0; i<element.length; i++){



                                if(data[0]['y'][0]==1 & data[0]['x'][i]==0){

                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','450');


                                }else if(data[0]['y'][0]==2  & data[0]['x'][i]==0){


                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','225');

                                }else if(data[0]['y'][0]==3 & data[0]['x'][i]==0){


                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','0');


                                }else if(data[0]['y'][i]==1){


                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','450');


                                }else if(data[0]['y'][i]==2){


                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','225');

                                }else if(data[0]['y'][i]==3){


                                    document.getElementsByClassName(data[0]['label'])[i].setAttribute('cy','0');


                                }

                            }