2013-11-27 15 views
8

Ich habe ein Kreisdiagramm in D3 mit einem Strich, um jedes Segment zu trennen. Allerdings würde ich gerne einen Rand nur zum äußeren Bereich der Slices hinzufügen, nicht in einer kontinuierlichen Linie, sondern vielmehr zu den Lücken, die durch die Striche in den ursprünglichen Slices erzeugt werden. Siehe mein Bild zur Klärung. Irgendwelche Gedanken darüber, wie man das macht?D3.js: Kreisdiagramm, Hinzufügen eines Rahmens nur zum Outer-Bereich

Siehe 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

Antwort

10

Ich löste das, indem ich zwei zusätzliche Bogensätze hinzufügte, was bis zu drei ergab. Die erste ist die normale Kuchen, OHNE streicht

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

Die zweite wird die Grenze ich in erster Linie hinzufügen wollte. Es ist nur eine Reihe von Bögen, die unser ursprüngliches aber in einer anderen Farbe umgeben. Noch keine Schläge.

Und schließlich wird die dritte archset derjenige sein, der tatsächlich die Striche zieht ich

//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); 

wollte Dies macht sich für den Effekt, siehe http://jsfiddle.net/odiseo/4xk58/4/

Desired visual effect

1

Sie können dies simulieren, indem Sie einen anderen Satz von Bögen hinzufügen, die als Grenze wirkt.

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

// etc 

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

Vollständige jsfiddle here.

+0

Aber ich brauche zu bewahren die Lücken zwischen den Scheiben. Das heißt, ich möchte nicht, dass die Grenze fortlaufend ist, sondern unterbrochen wird, wo die Bogenstriche – odiseo

+0

sein sollten. Sie können nicht wirklich Teilgrenzen in SVG haben (obwohl [diese Frage] (http://stackoverflow.com/questions/17908988)/partial-border-stroke-using-svg) kann helfen), also könnten Sie versuchen, das zu erreichen, indem Sie einen Strich zum "border" -Bogen hinzufügen. Dann haben Sie eine Lücke zwischen diesen und den tatsächlichen Bögen. –

Verwandte Themen