heatmap = {
const svg = d3.create('svg')
.attr('width', svgSetting.width)
.attr('height', svgSetting.height)
var x = d3.scaleBand()
.range([svgSetting.margin.left, svgSetting.width - svgSetting.margin.right])
.domain(genes)
svg.append("g")
.attr("transform", `translate(0,${svgSetting.height - svgSetting.margin.bottom})`)
.call(d3.axisBottom(x))
.selectAll("text")
.attr("y", 0)
.attr("x", 9)
.attr("dy", ".35em")
.attr("transform", "rotate(90)")
.style("text-anchor", "start");
var y = d3.scaleBand()
.range([ svgSetting.height - svgSetting.margin.bottom, svgSetting.margin.top ])
.domain(samples)
svg.append("g")
.attr("transform", `translate(${svgSetting.margin.left},0)`)
.call(d3.axisLeft(y));
let extent = d3.extent(data_formatted, (d => d['value']))
var myColor = d3.scaleLinear()
.range(["blue", "white", "red"])
.domain([extent[0], 0, extent[1]])
svg.selectAll()
.data(data_formatted)
.enter()
.append("rect")
.attr("x", function(d) { return x(d.Gene) })
.attr("y", function(d, i) { return y(d.Sample) })
.attr("width", x.bandwidth() )
.attr("height", y.bandwidth() )
.style("fill", function(d) { return myColor(d.value)} )
return svg.node()
}