javascript - D3 条形图列溢出

标签 javascript html d3.js charts nvd3.js

我在使用 d3 创建条形图时遇到问题,其中列溢出且 y 轴标签不正确。这是一个 fiddle http://jsfiddle.net/fajgvj9v/这说明了问题。数据正在解析<pre id="data">标签来模拟我正在使用的 CSV。如果将“a”的值从 4000 更改为 5000,它将按预期呈现。

<pre id="data">
name,count
a, 4000
b, 500
</pre>

yTitle = "Items";

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

var x = d3.scale.ordinal()
  .rangeRoundBands([0, width], .1);

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

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

var yAxis = d3.svg.axis()
  .scale(y)
  .orient("left")
  .tickFormat(d3.format(".2s"));

var svg = d3.select("#malware_by_os").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 + ")");

var data = d3.csv.parse( d3.select("pre#data").text() );
console.log(data);
  var xLbl = d3.keys(data[0])[0];
  var yLbl = d3.keys(data[0])[1];

  data.sort(function(a, b) {
    return b[yLbl] - a[yLbl];
  });
  x.domain(data.map(function(d) {
    return d[xLbl];
  }));
  y.domain([0, d3.max(data, function(d) {
    return d[yLbl];
  })]);

  svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);

  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(yTitle);

  svg.selectAll(".bar")
    .data(data)
    .enter().append("rect")
    .attr("class", "bar")
    .attr("x", function(d) {
      return x(d[xLbl]);
    })
    .attr("width", x.rangeBand())
    .attr("y", function(d) {
      return y(d[yLbl]);
    })
    .attr("height", function(d) {
      return height - y(d[yLbl]);
    });

最佳答案

max函数需要使用+转换为数字

  y.domain([0, d3.max(data, function(d) {
    return d[yLbl];
  })]);

应该是

  y.domain([0, d3.max(data, function(d) {
    return +d[yLbl];
  })]);

关于javascript - D3 条形图列溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34957642/

相关文章:

javascript - 将 D3.js 与 javascript 对象而不是外部 JSON 文件一起使用

javascript - 对具有非唯一类名的元素执行操作

javascript - 创建基于表单选择的 Javascript 确认框 - PHP

javascript - 使用 jquery 更改 css 值

html - History.js 的实现

html - 当宽度基于百分比动态变化时制作一个 <div> 正方形

javascript - 为什么内部工具提示是 "Undefined"?

javascript - 具有随机 url 的 HTML 表单操作

javascript - 如何在包含 iframe 或仅包含框架的 HTML 文档中查找选择

javascript - D3 : Invalid attribute [object Object]