{
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height]);
svg.append("rect")
.attrs({
height: height,
width: width,
fill: "#f7f7f7"
});
svg.selectAll("g")
.data(["topic_links", "topic_nodes", "topic_bars"]).enter()
.append("g")
.attrs({
"id": d => d
});
svg.select("#topic_nodes")
.selectAll("circle")
.data(topic_nodes).enter()
.append("circle")
.attrs({
cx: d => scales.m(d.m),
cy: d => scales.k(d.k),
r: 10,
fill: "black"
})
.on("mouseover", (d, e) => update_bars(d, e))
svg.select("#topic_links")
.selectAll("edges")
.data(W.objects()).enter()
.append("line")
.attrs({
x1: d => scales.m(d.m),
y1: d => scales.k(d.k),
x2: d => scales.m(d.m_next),
y2: d => scales.k(d.k_next),
stroke: "#d3d3d3",
"stroke-width": d => scales.w(d.w),
opacity: d => scales.w_alpha(d.w)
});
svg.select("#topic_bars")
.selectAll("rect")
.data(B0.objects(), d => d.w).enter()
.append("rect")
.attrs({
x: d => scales.v(d.w),
y: d => 300 - scales.b(d.b),
width: scales.v.bandwidth(),
height: d => scales.b(d.b),
fill: d => scales.b(d.b) > 1.5 ? "black" : "#f7f7f7"
})
function update_bars(event, elem) {
let B_ = B.objects().filter(d => d.m == elem.m & d.k == elem.k)
svg.select("#topic_bars")
.selectAll("rect")
.data(B_, d => d.w)
.transition()
.duration(1000)
.attrs({
y: d => 300 - scales.b(d.b),
height: d => scales.b(d.b),
fill: d => scales.b(d.b) > 1.5 ? "black" : "#f7f7f7"
})
}
return svg.node()
}