使用函数索引到数组中

Indexing into array with functions

本文关键字:数组 索引 函数      更新时间:2023-09-26

我正试图从https://github.com/jasondavies/science.js/tree/master/examples/kde仅具有一个1行而不是2行。要做到这一点,我需要修改下面的代码。更具体地说,我需要修改.data(d3.values(science.stats.bandwidth))。从Chrome开发工具中,我可以看到var bw = d3.values(science.stats.bandwidth)返回的变量如下:

bw: Array[2]
0: function (x) {
1: function (x) {
length: 2
__proto__: Array[0]

我尝试过对此变量进行索引,但返回的函数不能用于绘图。它变为undefined

var granularity = 0.1;
var x_min = 30;
var x_max = 110;
d3.json("faithful.json", function(faithful) {
  data = faithful;
  var w = 800,
      h = 400,
      x = d3.scale.linear().domain([30, 110]).range([0, w]);
      bins = d3.layout.histogram().frequency(false).bins(x.ticks(60))(data),
      max = d3.max(bins, function(d) { return d.y; }),
      y = d3.scale.linear().domain([0, .1]).range([0, h]),
      kde = science.stats.kde().sample(data);
  var vis = d3.select("body")
    .append("svg")
      .attr("width", w)
      .attr("height", h);
   var bars = vis.selectAll("g.bar")
      .data(bins)
    .enter().append("g")
      .attr("class", "bar")
      .attr("transform", function(d, i) {
        return "translate(" + x(d.x) + "," + (h - y(d.y)) + ")";
      });
  bars.append("rect")
      .attr("fill", "steelblue")
      .attr("width", function(d) { return x(d.dx + 30) - 1; })
      .attr("height", function(d) { return y(d.y); });
  var line = d3.svg.line()
      .x(function(d) { return x(d[0]); })
      .y(function(d) { return h - y(d[1]); });
  var bw = d3.values(science.stats.bandwidth);
  vis.selectAll("path")
      /* .data(d3.values(science.stats.bandwidth)) */
      .data(bw[1])
    .enter().append("path")
      .attr("d", function(h) {
        return line(kde.bandwidth(h)(d3.range(x_min, x_max, granularity)));
      });
});

.data()需要一个数组。用途:

.data([bw[1]])

此处为示例。