【问题标题】:How do I get my area filled beneath my d3 line chart to be a gradient?如何让我的 d3 折线图下方的区域填充为渐变?
【发布时间】:2018-01-17 21:11:45
【问题描述】:

我正在使用 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;          
}

但正如您从我的 Fiddle 中看到的那样——https://jsfiddle.net/yw46ycse/3/,我所拥有的是一个实心区域。我还需要做什么才能使图表下方的区域成为渐变?

【问题讨论】:

    标签: css d3.js gradient linechart area


    【解决方案1】:

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      需要解决的几个问题:

      1. 每个站点都有“海军蓝”,所以渐变不会显示
      2. 在这种情况下最好不要.attr("gradientUnits", "userSpaceOnUse")。通过使用 objectBoundingBox (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientUnits) 的默认设置,您可以只使用 0,0 0,1 来指定垂直线性渐变。

      例如:

      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/

      【讨论】:

      • 感谢此次更新。我想要的是一个渐变,从海军开始,然后逐渐消失(透明)。我可以将“红色”替换为“透明”吗?
      • 我试图用你的 Fiddle 中的“stop-opactiy”替换“stop-color”,但这给我留下了一个完全黑色的区域,没有任何渐变。如果我是 CSS 人,我可能会更清楚如何处理它。
      • 可能值得另一个 SO 问题,或改变它。我想你需要每个站点的颜色和不透明度
      • 你不能用“rgba(0,0,128,0)”指定颜色不透明度吗?喜欢this 吗? (rgb(0,0,128) 是海军)。然后你可以像so here一样缓和你想要的锥形。
      猜你喜欢
      • 2021-12-23
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多