function drawLinGraph(elements, subsets, indexs){
const svg = d3.select(DOM.svg(width, height));
let links = [];
for(let i=0; i<subsets.length; i++){
for(let j=0; j<subsets[i]['container'].length; j++){
links.push([{'x': subsets[i].x + subsets[i].width/2,
'y': subsets[i].y + subsets[i].height,
'color': subsets[i].color
},
{'x': elements[subsets[i]['container'][j]].x,
'y': elements[subsets[i]['container'][j]].y - elements[subsets[i]['container'][j]].r
}
]);
}
};
const line = d3.line()
.x(d => d.x)
.y(d => d.y);
svg.selectAll('rect').data(subsets)
.enter().append('rect')
.attr('x', d => d.x)
.attr('y', d => d.y)
.attr('width', d => d.width)
.attr('height', d => d.height)
.style('fill', 'white')
.style('stroke', d => d.color);
svg.selectAll('circle').data(elements)
.enter().append('circle')
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', d => d.r)
.style('fill', 'none')
.style('stroke', d => d.color);
svg.selectAll('path').data(links)
.enter().append('path')
.style('fill', 'none')
.style('stroke', d => d[0].color)
.style('stroke-width', '1px')
.attr('d', line);
svg.selectAll('g').data(elements)
.enter().append('text')
.attr('x', d => d.x - 10)
.attr('y', d => d.y + d.r + 15)
.text((d,i) => `s${i+1}`);
svg.selectAll('g').data(subsets)
.enter().append('text')
.attr('x', d => d.x)
.attr('y', d => d.y - 5)
.text((d,i) => `S${i+1} (${d.weight})`);
svg.append('text')
.style('font', '14px sans-serif')
.attr('x', 10)
.attr('y', 15)
.text(`The result is ${(R.sum(indexs.map(d => subsets[d]['weight']))).toFixed(2)}`);
return svg.node();
}