如何将阴影添加到d3.js饼图或圆环图

mat*_*att 16 javascript svg d3.js pie-chart

我正在使用d3.js制作一个简单的圆环图.

我没有实现阴影或盒阴影效果来为图表添加一些深度.我试过添加css:

path {
  -moz-box-shadow:    3px 3px 5px 6px #ccc;
  -webkit-box-shadow: 3px 3px 5px 6px #ccc;
  box-shadow:         3px 3px 5px 6px #ccc;
}
Run Code Online (Sandbox Code Playgroud)

路径标签和g标签,但无济于事.有没有人知道这是可能的CSS或知道某种单词的解决方法?

真的很感激这个基本问题的帮助.马特

var data = [0, 35, 65];

var w = 400,
    h = 400,
    r = Math.min(w, h) / 2,
   ir = r * 0.5,
   color = d3.scale.category20(),
   donut = d3.layout.pie().sort(null),
   arc = d3.svg.arc().innerRadius(ir).outerRadius(r);

var svg = d3.select("body").append("svg:svg")
    .attr("width", w)
   .attr("height", h)
.append("svg:g")
   .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");

var arcs = svg.selectAll("path")
    .data(donut(data))
.enter().append("svg:path")
    .attr("fill", function(d, i) { return color(i); })
    .attr("d", arc);
Run Code Online (Sandbox Code Playgroud)

rep*_*cus 20

如果有人碰到这个...

 /* For the drop shadow filter... */
  var defs = svg.append("defs");

  var filter = defs.append("filter")
      .attr("id", "dropshadow")

  filter.append("feGaussianBlur")
      .attr("in", "SourceAlpha")
      .attr("stdDeviation", 4)
      .attr("result", "blur");
  filter.append("feOffset")
      .attr("in", "blur")
      .attr("dx", 2)
      .attr("dy", 2)
      .attr("result", "offsetBlur");

  var feMerge = filter.append("feMerge");

  feMerge.append("feMergeNode")
      .attr("in", "offsetBlur")
  feMerge.append("feMergeNode")
      .attr("in", "SourceGraphic");
Run Code Online (Sandbox Code Playgroud)

然后将此过滤器附加到svg元素,例如线条或条形或其他任何您想要的东西...

svg.append("path")
  .datum(data)
  .attr("class", "line")
  .attr("d", line)
  .attr("filter", "url(#dropshadow)");
Run Code Online (Sandbox Code Playgroud)


Eri*_*röm 9

您可以使用svg过滤器,这是一个显示如何应用模糊过滤器的示例.

这里可以看到一个drophadow svg过滤器的例子.结合这两个例子来获得你需要的东西.

  • 以下是针对d3特定示例的一些有用的参考代码:https://github.com/wbzyl/d3-notes/blob/master/hello-drop-shadow.html (2认同)

Oll*_*son 7

如果你需要控制阴影的颜色,这对我有用:

var defs = svg.append("defs");

    var filter = defs.append("filter")
        .attr("id", "dropshadow")

    filter.append("feGaussianBlur")
        .attr("in", "SourceAlpha")
        .attr("stdDeviation", 4)
        .attr("result", "blur");
    filter.append("feOffset")
        .attr("in", "blur")
        .attr("dx", 2)
        .attr("dy", 2)
        .attr("result", "offsetBlur")
    filter.append("feFlood")
        .attr("in", "offsetBlur")
        .attr("flood-color", "#3d3d3d")
        .attr("flood-opacity", "0.5")
        .attr("result", "offsetColor");
    filter.append("feComposite")
        .attr("in", "offsetColor")
        .attr("in2", "offsetBlur")
        .attr("operator", "in")
        .attr("result", "offsetBlur");

    var feMerge = filter.append("feMerge");

    feMerge.append("feMergeNode")
        .attr("in", "offsetBlur")
    feMerge.append("feMergeNode")
        .attr("in", "SourceGraphic");
Run Code Online (Sandbox Code Playgroud)

d3:从这个答案:https://stackoverflow.com/a/25818296/1154787