我目前正在尝试将svg:image放置在弧线的中心:
var arcs = svg.selectAll("path");
arcs.append("svg:image")
.attr("xlink:href", "http://www.e-pint.com/epint.jpg ")
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.attr("width", "150px")
.attr("height", "200px");
如果有人可以就没有出现的原因给我任何建议,我将不胜感激
答案 0 :(得分:0)
在尝试将path
元素附加到它们之后,查看jsfiddle,您正在创建svg:image
元素。它应该是相反的方式。您应首先创建弧然后附加图像。
其次,据我所知,svg:path
元素不应包含任何svg:image
标记。如果你把它放在里面它似乎没有显示它们。相反,您应该使用类svg:g
创建arc
标记,然后使用这些标记放置svg:images
略微修改你的jsfiddle看起来像这样:
var colours = ['#909090','#A8A8A8','#B8B8B8','#D0D0D0','#E8E8E8'];
var arcs = svg.selectAll("path");
for (var z=0; z<30; z++){
arcs.data(donut(data1))
.enter()
//append the groups
.append("svg:g")
.attr("class", "arc")
.append("svg:path")
.attr("fill", function(d, i) { return colours[(Math.floor(z/6))]; })
.attr("d", arc[z])
.attr("stroke","black")
}
//here we append images into arc groups
var pics = svg.selectAll(".arc").append("svg:image")
.attr("xlink:href", "http://www.e-pint.com/epint.jpg ")
.attr("transform", function(d,i) {
//since you have an array of arc generators I used i to find the arc
return "translate(" + arc[i].centroid(d) + ")"; })
.attr("x",-5)
.attr("y",-10)
.attr("width", "10px")
.attr("height", "20px");
我还减少了图像的大小并使它们偏移,使它们适合弧形。