How to add icons in dc.js piechart slices instead texts

39 views
Skip to first unread message

michael phandera

unread,
Apr 30, 2021, 4:39:23 PM4/30/21
to dc-js user group

Hie Community,

I have been working with dc.js for a year now but recently i have been tasked to implement the pie chart as attached image.

What I want is to replace the texts in pie chart slices with appropriate images.

I saw the same implemented in pure d3.js hence if someone can translate the implementation to dc.js

http://jsfiddle.net/LLwr4q7s/

Thank you very much if more details i am ready to provide


pie .width(600) .height(500) .radius(200) .innerRadius(120) .dimension(disastersDimension) .group(disastersGroup) .on("filtered", function (chart, filter) { var sel = filter; let percentage = 0, value = 0; let disastersBuffer = []; totalAmount = 0; pie.selectAll("text.pie-slice").text((d) => { percentage = dc.utils.printSingleValue( ((d.endAngle - d.startAngle) / (2 * Math.PI)) * 100 ); disastersBuffer.push({ ...d.data, percentage }); totalAmount += parseFloat(d.data.value); }); filterPiechart(sel, percentage, totalAmount, disastersBuffer, value); }) .on("renderlet", (chart) => { if (!chart.selectAll("g.selected")._groups[0].length) { chart.filter(null); filterPiechart("", 100, totalAmount, [], 0); } var arc = chart.radius(250).innerRadius(100); console.log(arc); var g = chart.selectAll(".pie-slice"); chart .selectAll(".pie-slice") .append("image") .attr("xlink:href", "img/disasters/Floods.png") .attr("transform", "translate(-10,10) rotate(315)") .attr("width", "26px") .attr("hight", "26px") .style("background-color", "white") .attr("x", function (d) { var bbox = this.parentNode.getBBox(); return bbox.x; }) .attr("y", function () { var bbox = this.parentNode.getBBox(); return bbox.y; }); g.append("g") .append("svg:image") .attr("xlink:href", function (d) { let filteredImage = self.piedata.find( (i) => i.label == d.data.key ); let image = filteredImage ? filteredImage.image : ""; return image; }) .attr("width", 30) .attr("height", 40) .attr("x", function (d) { var bbox = this.parentNode.getBBox(); return bbox.x; }) .attr("y", function (d) { var bbox = this.parentNode.getBBox(); return bbox.y; }); }) .addFilterHandler(function (filters, filter) { filters.length = 0; // empty the array filters.push(filter); return filters; });

photo.PNG
Reply all
Reply to author
Forward
0 new messages