Javascript 使用NVD3.js构建具有焦点的折线图。为什么我的焦点栏坏了

Javascript 使用NVD3.js构建具有焦点的折线图。为什么我的焦点栏坏了,javascript,d3.js,nvd3.js,Javascript,D3.js,Nvd3.js,我试着按照NVD3示例页面上的,但焦点栏不工作,我看不到我错过了什么 这说明了问题所在。您可以看到,在焦点栏中拖动不会聚焦图表 这是我的HTML(我有一些静态测试数据,底部是NVD3示例页面中的测试数据生成器) $title $title //我的假数据 var testData=[ { 关键字:'预期', //值:$expectedData 价值观:[ {x:0,y:1}, {x:1,y:2}, {x:2,y:3}, {x:3,y:4}, {x:4,y:5}, ] }, { 关键字:“实际”

我试着按照NVD3示例页面上的,但焦点栏不工作,我看不到我错过了什么

这说明了问题所在。您可以看到,在焦点栏中拖动不会聚焦图表

这是我的HTML(我有一些静态测试数据,底部是NVD3示例页面中的测试数据生成器)


$title
$title
//我的假数据
var testData=[
{
关键字:'预期',
//值:$expectedData
价值观:[
{x:0,y:1},
{x:1,y:2},
{x:2,y:3},
{x:3,y:4},
{x:4,y:5},
]
},
{
关键字:“实际”,
//值:$actualData
价值观:[
{x:0,y:3},
{x:1,y:4},
{x:2,y:5},
{x:3,y:4},
{x:4,y:6},
]
}
]
log(genTestData());
log(testData);
nv.addGraph(函数(){
var图表=nv.models.lineWithFocusChart();
chart.xAxis
.tickFormat(d3.format(',f'));
图1.yAxis
.tickFormat(d3.format(',.2f'));
图表2轴
.tickFormat(d3.format(',.2f'));
d3.选择(“#图表svg”)
.数据(测试数据)
.transition().持续时间(500)
.电话(图表);
nv.utils.windowResize(图表更新);
收益表;
});
/**************************************
*工作测试示例的数据生成器
*/
函数genTestData(){
返回流_层(3128,.1).map(函数(数据,i){
返回{
键:'流'+i,
值:数据
};
});
}
/*灵感来源于Lee Byron的测试数据生成器*/
功能流_层(n、m、o){
如果(arguments.length<3)o=0;
功能凹凸(a){
var x=1/(.1+Math.random()),
y=2*Math.random()-.5,
z=10/(.1+Math.random());
对于(变量i=0;i
小提琴在很大程度上起作用。显然,有一个问题是,如果你的关注点少于2点,那么主图表是空白的。你会注意到nvd3的示例页面有这个问题,但是有足够的数据,人们不得不故意放大到那个极限。(与只有5个数据点的小提琴不同)

只要确保焦点上的最小选择大小足够大,可以跨越至少2个点,就可以解决您的问题

<!DOCTYPE html>
<html>
<head>
<title>$title</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/d3/3.4.9/d3.js" charset="utf-8"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.js"></script>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.css"/>

</head>
<body>
  <h1>$title</h1>
  <div id="chart">
    <svg style="height:500px"></svg>
  </div>

  <script>
    //my fake data
    var testData = [
      {
        key: 'expected',
        //values: $expectedData
        values: [
          {x: 0, y: 1},
          {x: 1, y: 2},
          {x: 2, y: 3},
          {x: 3, y: 4},
          {x: 4, y: 5},
        ]
      },
      {
        key: 'actual',
        //values: $actualData
        values: [
          {x: 0, y: 3},
          {x: 1, y: 4},
          {x: 2, y: 5},
          {x: 3, y: 4},
          {x: 4, y: 6},
        ]
      }
    ]
    console.log(genTestData());
    console.log(testData);

    nv.addGraph(function() {
      var chart = nv.models.lineWithFocusChart();

      chart.xAxis
          .tickFormat(d3.format(',f'));

      chart.yAxis
          .tickFormat(d3.format(',.2f'));

      chart.y2Axis
          .tickFormat(d3.format(',.2f'));

      d3.select('#chart svg')
          .datum(testData)
          .transition().duration(500)
          .call(chart);

      nv.utils.windowResize(chart.update);

      return chart;
    });
    /**************************************
     * The data generator for the working test example
     */

    function genTestData() {
      return stream_layers(3,128,.1).map(function(data, i) {
        return { 
          key: 'Stream' + i,
          values: data
        };
      });
    }

    /* Inspired by Lee Byron's test data generator. */
    function stream_layers(n, m, o) {
      if (arguments.length < 3) o = 0;
      function bump(a) {
        var x = 1 / (.1 + Math.random()),
            y = 2 * Math.random() - .5,
            z = 10 / (.1 + Math.random());
        for (var i = 0; i < m; i++) {
          var w = (i / m - y) * z;
          a[i] += x * Math.exp(-w * w);
        }
      }
      return d3.range(n).map(function() {
          var a = [], i;
          for (i = 0; i < m; i++) a[i] = o + o * Math.random();
          for (i = 0; i < 5; i++) bump(a);
          return a.map(stream_index);
        });
    }
    function stream_index(d, i) {
      return {x: i, y: Math.max(0, d)};
    }
  </script>
</body>
</html>