function imageLabels(svg) {
let label = svg.append("g")
.attr("font-weight", "bold")
.attr("font-size", barSize * 0.6)
.attr("font-family", "sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji")
.attr("text-anchor", "end")
.selectAll("text");
return (data, transition) => label = label
.data(data.slice(-n).reverse(), ([name]) => name)
.join(
enter => enter.append("image")
.attr("href", ([name]) => emote(name))
.attr("width", "30px")
.attr("height", "30px")
.attr("transform", ([, value]) => `translate(${x(value)},${y(n)})`)
.attr("y", y.bandwidth() / 2 - 15)
.attr("x", -50),
update => update,
exit => exit.transition(transition).remove()
.attr("transform", ([, value]) => `translate(${x(value)},${y(n)})`)
)
.call(bar => bar.transition(transition)
.attr("transform", ([, value], i) => `translate(${x(value)},${y(i)})`)
.call(g => g.select("tspan").tween("text", function([, value]) { return textTween(+this.textContent.replace(/,/g, ""), value); })));
}