removing pie pieces

master
Matt Huntington 8 years ago
parent f84367f585
commit 53a00eb0bb

@ -198,3 +198,98 @@ var arc = d3.arc()
.innerRadius(100) //to make this a donut graph, adjust this value
.outerRadius(radius);
```
## Remove parts of the pie
First let's add ids to our data to make removing easier:
```javascript
var dataset = [
{ id: 1, label: 'Abulia', count: 10 },
{ id: 2, label: 'Betelgeuse', count: 20 },
{ id: 3, label: 'Cantaloupe', count: 30 },
{ id: 4, label: 'Dijkstra', count: 40 }
];
```
Now let's use those ids when we map data to paths:
```javascript
var path = container.selectAll('path')
.data(pie(dataset), function(datum){
return datum.data.id
})
```
Let's save a record of what the data is currently set to (we'll use this later):
```javascript
var path = container.selectAll('path')
.data(pie(dataset), function(datum){
return datum.data.id
})
.enter()
.append('path')
.attr('d', arc)
.attr('fill', function(d) {
return colorScale(d.data.label);
})
.each(function(d) { this._current = d; }); //add this
```
Create the click handler:
```javascript
path.on('click', function(clickedDatum, clickedIndex){
});
```
Remove the selected data from the dataset array:
```javascript
path.on('click', function(clickedDatum, clickedIndex){
dataset = dataset.filter(function(currentDatum, currentIndex){ //new
return clickedDatum.data.id !== currentDatum.id //new
}); //new
});
```
Remove the `path` elements from the `svg`:
```javascript
path.on('click', function(clickedDatum, clickedIndex){
dataset = dataset.filter(function(currentDatum, currentIndex){
return clickedDatum.data.id !== currentDatum.id
});
path //new
.data(pie(dataset), function(datum){ //new
return datum.data.id //new
}) //new
.exit().remove(); //new
});
```
Add the transition:
```javascript
path.on('click', function(clickedDatum, clickedIndex){
dataset = dataset.filter(function(currentDatum, currentIndex){
return clickedDatum.data.id !== currentDatum.id
});
path
.data(pie(dataset), function(datum){
return datum.data.id
})
.exit().remove();
path.transition() //create the transition
.duration(750) //add how long the transition takes
.attrTween('d', function(d) { //tween the d attribute
var interpolate = d3.interpolate(this._current, d); //interpolate from what the d attribute was and what it is now
this._current = interpolate(0); //save new value of data
return function(t) {
return arc(interpolate(t));
};
});
});
```

Loading…
Cancel
Save