代码之家  ›  专栏  ›  技术社区  ›  ccsv

D3使用点和线绘制具有范围(最小值、最大值)值的分类数据

  •  0
  • ccsv  · 技术社区  · 6 年前

    value2 )和一个最大值( value

    //The data
    var data =[{"name": 'Scotty', "value2":0, "value":17},
     {"name":'Dick', "value2":10, "value":17},
     {"name":'James', "value2":5, "value":null},
     {"name":'Max', "value2":2, "value":9}]
    

    目前,我用一个条形图来表示它,使用这个代码可以正常工作,除非点value2和value非常接近或者有一个空值。

    //Chart size parameters
    var margin = {top: 20, right: 30, bottom: 90, left: 40},
        width = 830 - margin.left - margin.right,
        height = 500 - margin.top - margin.bottom;
    
    //Chart axis
    var x = d3.scaleBand()
        .domain(data.map(function(d) { return d.name; }))
        .range([2, width])
        .scaleBand(0.10);
    
    var y = d3.scaleLinear()
        .domain([0, d3.max(data, function(d) { return d.value; })])
        .range([height, 0]);
    
    var xAxis = d3.axisBottom(x);
    
    var yAxis = d3.axisLeft(y);
    
    //Initialize chart
    var chart = d3.select("#mychart").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 + ")");
    
      //Adding both axis
      chart.append("g")
          .attr("class", "x axis")
          .attr("transform", "translate(0," + height + ")")
          .call(xAxis)
    
      chart.append("g")
          .attr("class", "y axis")
          .call(yAxis);
    
     //Where the box is drawn
      chart.selectAll(".box")
          .data(data)
        .enter().append("rect")
          .attr("class", "box")
          .attr("x", function(d) { return x(d.name); })
          .attr("y", function(d) { return y(d.value); })
          .attr("height", function(d) { return y(d.value2) - y(d.value); })  //Plot range
          .attr("width", x.bandwidth()); //spacing for bars
    

    有没有一种方法可以用以下方式绘制数据:

    • 如果存在两个点,则用连接它们的路径绘制它们
    • 价值 只画一个点
    0 回复  |  直到 6 年前