D3使用点和线以范围(最小,最大)值绘制分类数据

时间:2018-09-04 07:24:54

标签: javascript d3.js bar-chart

我有一个数据集,该数据集包含3个字段,分别是名称,代表范围的最小值(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

是否可以使用以下方式绘制数据:

  • 如果存在两个点,则绘制两个点并用一条连接它们的路径
  • 如果在字段value中存在一个点为空的点,则仅绘制一个点

0 个答案:

没有答案