2013-11-27 15 views
8

Tôi có biểu đồ hình tròn trong D3 với nét vẽ để tách từng lát. Tuy nhiên, tôi muốn thêm một biên giới chỉ vào vùng outter của các slice, không phải trong một dòng liên tục mà là tôn trọng các khoảng trống được tạo ra bởi các nét trong các slice gốc. Xem hình ảnh của tôi để làm rõ. Bất kỳ suy nghĩ về cách làm điều đó?D3.js: Biểu đồ hình tròn, chỉ thêm đường viền vào vùng outter

Xem http://jsfiddle.net/4xk58/

arcs.append("path") 
.attr("fill", function (d, i) { 
return color(i); 
}) 
.attr("d", arc).style('stroke', 'white') 
.style('stroke-width', 5); 

I want an outter border like this

Trả lời

10

Tôi đã giải quyết vấn đề này bằng cách thêm hai bộ vòm phụ, chiếm tối đa ba bộ. Cái đầu tiên là chiếc bánh bình thường, KHÔNG có nét

arcs.append("path") 
.attr("fill", function (d, i) { 
    return color(i); 
}).attr("d", arc); 

Thứ hai là biên giới tôi muốn thêm ở vị trí đầu tiên. Nó chỉ là một tập hợp các vòm xung quanh bản gốc của chúng ta nhưng với một màu khác. Chưa đột quỵ.

Và cuối cùng, archset thứ ba sẽ là một trong đó thực sự thu hút các nét Tôi muốn

//Draw phantom arc paths 
phantomArcs.append("path") 
    .attr("fill", 'white') 
    .attr("fill-opacity", 0.1) 
    .attr("d", arcPhantom).style('stroke', 'white') 
    .style('stroke-width', 5); 

Điều này làm cho hiệu quả, xem http://jsfiddle.net/odiseo/4xk58/4/

Desired visual effect

1

Bạn có thể mô phỏng này bằng cách thêm một bộ vòng cung có tác dụng như biên giới.

var arcBorder = d3.svg.arc() 
    .innerRadius(outerRadius) 
    .outerRadius(outerRadius + border); 

// etc 

arcs.append("path") 
    .attr("fill", "black") 
    .attr("d", arcBorder); 

Hoàn thành jsfiddle here.

+0

Nhưng tôi cần phải giữ gìn khoảng cách giữa các lát. Tức là, tôi không muốn biên giới được liên tục, nhưng bị gián đoạn nơi các vòng cung sẽ là – odiseo

+0

Bạn thực sự không thể có một phần biên giới trong SVG (mặc dù [câu hỏi này] (http://stackoverflow.com/questions/17908988/partial-border-stroke-using-svg) có thể giúp ích), vì vậy bạn có thể thử làm điều đó bằng cách thêm một đường viền vào vòng cung "biên giới". Sau đó, bạn sẽ có một khoảng cách giữa đó và các vòng cung thực tế mặc dù. –

Các vấn đề liên quan