drawVector = (g, x, y) => {
const origin = [0, 0],
scaled = v => [x(v[0]), y(v[1])];
let polyline = g.select("polyline");
if (polyline.empty()){
polyline = g.append("polyline")
.attr("points", d => [scaled(origin), scaled(d)])
.attr("stroke", "black")
.attr("marker-end", "url(#arrow)");
}
else {
polyline
.attr("points", d => [scaled(origin), scaled(d)])
}
let text = g.select("text");
if (text.empty()){
text = g.append("text")
.attr("dx", d => d[0] >= 0 ? 3 : -3)
.attr("transform", d => `translate(${scaled(d)})`)
.style("font-style", "italic")
.style("font-size", 11)
.style("text-anchor", d => d[0] >= 0 ? "start" : "end")
.text(d => d);
}
else {
text
.attr("dx", d => d[0] >= 0 ? 3 : -3)
.attr("transform", d => `translate(${scaled(d)})`)
.style("text-anchor", d => d[0] >= 0 ? "start" : "end")
.text(d => d);
}
}