我正在研究 d3.js 力图,我有一个问题。是否可以在具有某些坐标的三角形内制作力图?
这是我的代码:
var width = 500;
var height = 500;
//margin
var marginLeft = 10;
var marginTop = 10;
var marginRight = 10;
var marginBottom = 10;
var margin = { left: marginLeft , top: marginTop, right: marginRight, bottom: marginBottom};
//size of canvas
var innerWidth = width - margin.left - margin.right;
var innerHeight = height - margin.top - margin.bottom;
var radius = 10;
var svg = d3.select(".forcechart").append("svg")
.attr("width", width)
.attr("height", height)
.style("background", "#eee");
var tr = svg.append("polygon") // attach a polygon
.style("stroke", "black") // colour the line
.style("fill", "none") // remove any fill colour
.attr("points", "250,0, 12,173, 250,250"); // x,y points
var group = svg.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var graph = {
"nodes": [ { "x": 0, "y": 0 },
{ "x": 100, "y": 100 },
{ "x": 500, "y": 500 },
{ "x": 300, "y": 0 },
{ "x": 300, "y": 0 },
{ "x": 100, "y": 100 },
{ "x": 500, "y": 500 },
{ "x": 300, "y": 0 },
{ "x": 300, "y": 0 },
{ "x": 100, "y": 100 },
{ "x": 500, "y": 500 },
{ "x": 300, "y": 0 },
{ "x": 300, "y": 0 },
{ "x": 100, "y": 100 },
{ "x": 500, "y": 500 },
{ "x": 300, "y": 0 },
{ "x": 300, "y": 0 },
{ "x": 100, "y": 100 },
{ "x": 500, "y": 500 },
{ "x": 300, "y": 0 },
{ "x": 300, "y": 0 },
],
"links": []
};
var nodes = graph.nodes,
links = graph.links;
var force = d3.layout.force()
.size([innerWidth, innerHeight])
.nodes(nodes)
.links(links);
force.linkDistance(100);
force.charge(-200);
var link = group.selectAll('.link')
.data(links)
.enter().append('line')
.attr('class', 'link');
var node = group.selectAll('.node')
.data(nodes)
.enter().append('circle')
.attr('class', 'node');
force.on('tick', function() {
node.attr('r', radius)
.attr('cx', function(d) { return d.x; })
.attr('cy', function(d) { return d.y; });
link.attr('x1', function(d) { return d.source.x; })
.attr('y1', function(d) { return d.source.y; })
.attr('x2', function(d) { return d.target.x; })
.attr('y2', function(d) { return d.target.y; });
});
force.start();
完整代码在这里:http://codepen.io/Balzzac/pen/vGWXdQ http://codepen.io/Balzzac/pen/vGWXdQ。现在它是“group”内的力图,我需要使其位于三角形“tr”内,这样没有一个节点位于三角形的边界之外。
感谢帮助!
PS 抱歉我的英语=)