我可以使用图像作为d3树图的背景矩形吗?

时间:2013-09-26 15:56:19

标签: d3.js treemap

是否可以在d3中制作树图,每个矩形的背景为图像?我正在寻找类似于Silverlight here中所做的事情,但是对于d3。如果可能,是否有任何推荐的教程贯穿将背景连接到图像的过程?

3 个答案:

答案 0 :(得分:8)

是的,有几种方法可以在SVG中使用图像。您可能希望将图像定义为图案,然后使用它来填充矩形。有关更多信息,请参阅例如this question(无论您要填充哪个元素,程序都是相同的。)

在D3代码中,它看起来像这样(简化)。

svg.append("defs")
   .append("pattern")
   .attr("id", "bg")
   .append("image")
   .attr("xlink:href", "image.jpg");

svg.append("rect")
   .attr("fill", "url(#bg)");

答案 1 :(得分:6)

需要注意的是,图像需要具有宽度,高度属性

chart.append("defs")
                  .append('pattern')
                    .attr('id', 'locked2')
                    .attr('patternUnits', 'userSpaceOnUse')
                    .attr('width', 4)
                    .attr('height', 4)
                   .append("image")
                    .attr("xlink:href", "locked.png")
                    .attr('width', 4)
                    .attr('height', 4);

答案 2 :(得分:3)

使用模式在矩形中添加图像会使您的可视化变得非常慢。

你可以做类似的事情,这是我用于矩形节点到强制布局的代码,我想把由图像填充的矩形作为节点:

var node = svg.selectAll(".node")
    .data(force.nodes())
    .enter().append("g")
    .attr("class", "node");

node.append("rect")
    .attr("width", 80)
    .attr("height", 120)
    .attr("fill", 'none')
    .attr("stroke", function (d) {
        return colors(d.importance);
    }); 

node.append("image")
    .attr("xlink:href", function (d) { return d.cover;})
    .attr("x", 2)
    .attr("width", 76)
    .attr("height", 120)
    .on('dblclick', showInfo);