2016-08-10 173 views
0

我开发非常相似,这个例子的图表:http://jsfiddle.net/ezanker/L6nfq/NVD3线型图 - 填充线以上区域,而不是下面

但相反的填充蓝线下方的蓝色区域,我想,以填补区域它上面。在这种情况下我该怎么办?

我知道有(通过功能y0y1)这样采用纯D3.js一个简单的方法,但我想用NVD3库的解决方案。

可以在这个jsfiddle中做一个小的改变来填充线上方的蓝色区域而不是下面的区域?

谢谢。

回答

1

没办法,我可以看到使用nvd3提供的功能,所以我只是用碱d3破解它:

setTimeout(function(){ 
    var area = d3.svg.area() 
    .x(function(d) { return chart.xScale()(d.x); }) 
    .y0(0) 
    .y1(function(d) { return chart.yScale()(d.y); }); 
    var t = d3.select(".nv-series-2"), 
     d = t.datum().values; 
    t.append("path") 
    .attr("d", area(d)) 
    .style("fill", "steelblue"); 
}, 10); 

更新小提琴here

EDITS征求意见

这个怎么样疯狂:

var area = d3.svg.area() 
    .x(function(d) { 
     return chart.xScale()(d.x); 
    }) 
    .y0(0) 
    .y1(function(d) { 
     return chart.yScale()(d.y); 
    }); 
    function addArea() { 
    setTimeout(function() { 
     d3.selectAll("#cust-fill").remove(); 
     d3.selectAll('.nv-group') 
     .each(function(d) { 
      if (d.key === "Another sine wave") { 
      var t = d3.select(this), 
       d = t.datum().values; 
      t.append("path") 
       .attr("id", "cust-fill") 
       .attr("d", area(d)) 
       .style("fill", d.color) 
       .style("opacity", ".3"); 
      } 
     }) 
    }, 100); 
    } 
    nv.dispatch.render_end = addArea; 
    chart.dispatch.stateChange = addArea; 

更新fiddle

+0

它首先起作用,但是如果您选择并取消选择某些系列,则停止工作。有一些解决方法吗? – LeoGardel

+0

@LeoGardel,参见上面的编辑。 – Mark

+0

哇!它几乎完美地工作。我打算使用它,谢谢! – LeoGardel