barTooltip = function (player, season) {
let PlayerData = flatRawData.filter(d => d.player == player & d.year == season)
var colScale = d3.scaleOrdinal()
.domain(PlayerData.map(d => d.stat))
.range(["#EBD0B3","#c1d0cb","#AED8E6","#AED8E6"])
let statRangeData = flatRawData.filter(d => d.tourn_count >= 7)
let statRange = d3Array.rollup(statRangeData, v => [d3.min(v, d => d.sg),d3.max(v, d => d.sg)], d => d.stat)
let statRangeFlat = unroll(statRange,['stat','sg'],"sg")
headerSVG
.select("#player-name")
.text(`${player} | ${season}`)
barSVG
.selectAll("#rangeBars")
.data(statRangeFlat)
.join("rect").attr("id","rangeBars")
.attr("x", xScale(0))
.attr("y", (d, i) => yScale(i))
.attr("width", d => xScale(d.sg[1]) - xScale(0))
.attr("height", yScale.bandwidth())
.attr("fill", "#e6e6e6")
.attr("opacity",0.6)
barSVG
.selectAll("#bars")
.data(PlayerData)
.join("rect").attr("id","bars")
.attr("x", d => d.sg > 0 ? xScale(0) : xScale(d.sg))
.attr("y", (d, i) => yScale(i))
.attr("width", d => d.sg > 0 ? xScale(d.sg) - xScale(0) : xScale(0) - xScale(d.sg))
.attr("height", yScale.bandwidth())
.attr("fill", d => colScale(d.stat))
.attr("opacity",0.8)
barSVG
.selectAll("#sg-labels")
.data(PlayerData)
.join("text").attr("id","sg-labels")
.attr("x", d => xScale(d.sg))
.attr("y", (d, i) => yScale(i) + yScale.bandwidth()/2)
.text(d=> Math.round(d.sg*10)/10)
.attr("font-size",15)
.attr("text-anchor", d => d.sg >= 0 ? "start" : "end")
.attr("dy", "0.3em")
.attr("dx",d => d.sg >= 0 ? 4 : -4)
.attr("font-weight","bold")
.attr("fill",d=> d3.hsl(colScale(d.stat)).darker(0.1))
return tooltipsvg.node();
}