javascript - C3.js填充曲线之间的区域

标签 javascript d3.js svg charts c3.js

我有这样的图表chart

我需要填充虚线之间的 3 个区域。例如:填充 2 条红色虚线、2 条蓝色虚线和 2 条绿色虚线之间的区域。

我尝试这样做:

function fillArea(){
    var d = {};
    var x = [];
    var y1 = [];
    var y0 = [];

    for(var i = 0; i < chartJson.length; i++){
        x.push(chartJson[i].run_date);
        y0.push(chartJson[i].diviationMinus);
        y1.push(chartJson[i].diviationPlus);
    }
    d.x = x;
    d.y1 = y1;
    d.y0 = y0;


    var area = d3.svg.area()
                 .x(function(d) {return x(d.x); })
                 .y0(function(d) { return y(d.y0); })
                 .y1(function(d) { return y(d.y1); });  

}
fillArea();

但什么也没发生。这是jsfiddle https://jsfiddle.net/1xnc6y58/

最佳答案

将 fillArea() 函数更改为以下代码:

function fillArea(){
    var yscale = chart.internal.y; 
    var xscale = chart.internal.x; 
var indexies = d3.range( chartJson.length );

var area = d3.svg.area()
                         .interpolate("linear")
             .x(function(d) {return xscale(chartJson[d].x); })
             .y0(function(d) { return yscale(chartJson[d].y0); })
             .y1(function(d) { return yscale(chartJson[d].y1); }); 

 d3.select("#chart svg g")
  .append('path')
  .datum(indexies)
  .attr('class', 'area')
  .attr('d', area);}

添加了CSS:

path.area { 
  stroke: lightgreen;
  fill: #e6ffe6;
  opacity: 0.9   }

工作 fiddle :fill between lines c3.js

但是如果X轴是时间序列,则xscale(这里应该是日期对象而不是字符串)。这是一个时间序列示例:Timeseries C3.js fill between lines

关于javascript - C3.js填充曲线之间的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33164568/

相关文章:

javascript - 在 Dynamics 表单中加载多个相关的 javascript Web 资源

javascript - 使用外部状态更改更新/重绘 Mithril 组件 View (Redux)

javascript - d3正负对数刻度怎么写

d3.js - 如何搜索节点并突出显示它

javascript - 如何将元素传递到 setTimeOut 函数

javascript - 滚动功能在 Firefox 上不起作用

javascript - d3.js : d3. min.js :1 Error: <path> attribute d: Expected number, "MNaN,NaNLNaN,NaN"

javascript - Angular2 - 具有 ng 风格的 SVG

javascript - SVG 作为 Div 的内联背景图像不起作用

javascript - 在单元格上的两篇论文之间拖放 - JointJs