如何将我的d3折线图下方的区域填充为渐变?

时间:2017-08-09 20:11:21

标签: css3 d3.js gradient linechart area

我正在使用d3 v4。我想创建一个折线图,其中图形下方的区域是一个区域,由从顶部的暗处到底部的浅处的渐变填充。我认为这是配置这种渐变的方法

  svg.append("linearGradient")
        .attr("id", "area-gradient")
        .attr("gradientUnits", "userSpaceOnUse")
        .attr("x1", 0).attr("y1", y(0))
        .attr("x2", 0).attr("y2", y(1000))
    .selectAll("stop")
        .data([
            {offset: "0%", color: "navy"},
            {offset: "30%", color: "navy"},
            {offset: "45%", color: "navy"},
            {offset: "55%", color: "navy"},
            {offset: "60%", color: "navy"},
            {offset: "100%", color: "navy"}
        ])
    .enter().append("stop")
        .attr("offset", function(d) { return d.offset; })
        .attr("stop-color", function(d) { return d.color; });

并使用此风格

.area {                         
    fill: url(#area-gradient);                  
    stroke-width: 0px;          
}

但正如你从我的小提琴 - https://jsfiddle.net/yw46ycse/3/中看到的那样,我所拥有的却是一个坚实的领域。还需要做些什么才能使图表下方的区域成为渐变?

2 个答案:

答案 0 :(得分:2)

要解决的几个问题:

  1. 你有"海军"对于每一站,所以渐变不会显示
  2. 在这种情况下,不是.attr("gradientUnits", "userSpaceOnUse")会更好。通过使用objectBoundingBox(https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientUnits)的默认设置,您可以使用0,0 0,1来指定垂直线性渐变。
  3. 例如:

    svg.append("linearGradient")
            .attr("id", "area-gradient")
            .attr("x1", 0).attr("y1", 0)
            .attr("x2", 0).attr("y2", 1)
        .selectAll("stop")
            .data([
                {offset: "0%", color: "navy"},
                {offset: "100%", color: "red"}
            ])
        .enter().append("stop")
            .attr("offset", function(d) { return d.offset; })
            .attr("stop-color", function(d) { return d.color; })
    

    更新小提琴: https://jsfiddle.net/yw46ycse/4/

答案 1 :(得分:2)

这是您要寻找的解决方案的版本吗?您可以使用透明作为停止颜色{offset: "95%", color: "transparent"}

这是你小提琴的修改版本,我曾经根据你的需要制作它。

https://codepen.io/Nasir_T/pen/OjOWxz

希望这有帮助。