function initialize_view(svg, image, encs, phi, scales, locs, update_fun) {
svg.select("#image")
.selectAll("rect")
.data(image).enter()
.append("rect")
.attrs({
"x": (d) => scales.x(d.i),
"y": (d) => scales.y(d.j),
"width": scales.x(1) - scales.x(0),
"height": scales.y(1) - scales.y(0),
"fill": (d) => scales.fill(d.value)
})
svg.select("#phi")
.selectAll("rect")
.data(phi).enter()
.append("rect")
.attrs({
"x": (d) => scales.x(d.i) / 2 + scales.phi_time(d.time),
"y": (d) => scales.y(d.j) / 2 + scales.zoom(d.zoom),
"width": scales.x(1) - scales.x(0),
"height": scales.y(1) - scales.y(0),
"fill": (d) => scales.fill(d.value)
});
svg.select("#g")
.selectAll("rect")
.data(encs["g"]).enter()
.append("rect")
.attrs({
"x": (d) => scales.x_enc(d.i),
"y": (d) => scales.vtime(d.time),
"width": scales.x_enc(1) - scales.x_enc(0),
"height": scales.vtime(0) - scales.vtime(1),
"fill": (d) => scales.enc_fill(d.value)
});
svg.select("#h")
.selectAll("rect")
.data(encs["h"]).enter()
.append("rect")
.attrs({
"x": (d) => scales.x_enc(d.i),
"y": (d) => scales.vtime(d.time),
"width": scales.x_enc(1) - scales.x_enc(0),
"height": scales.vtime(0) - scales.vtime(1),
"fill": (d) => scales.enc_fill(d.value)
});
svg.select("#l")
.selectAll("circle")
.data(locs["l"], (d) => d.time).enter()
.append("circle")
.attrs({
"cx": (d) => scales.x(d.value[0]),
"cy": (d) => scales.y(d.value[1]),
"r": 2,
"fill": "red"
})
var drag = d3.drag().on("drag", update_fun);
svg.select("#mu")
.selectAll("circle")
.data(locs["mu"], (d) => d.time).enter()
.append("circle")
.attrs({
"cx": (d) => scales.x(d.value[0]),
"cy": (d) => scales.y(d.value[1]),
"r": 8,
"fill": "blue",
"time": (d) => d.time
})
.call(drag)
var mu_line = d3.line()
.x((d) => scales.x(d.value[0]))
.y((d) => scales.x(d.value[1]));
svg.select("#mu_links")
.selectAll("path")
.data([locs["mu"]]).enter()
.append("path")
.attrs({
"d": mu_line,
"fill": "none",
"stroke-width": 2,
"stroke": "blue"
});
}