Javascript 在d3中过滤的forceManyBody

Javascript 在d3中过滤的forceManyBody,javascript,d3.js,Javascript,D3.js,我将D3V4用于带有节点和箭头的方向图 基本上我用这个例子: 但是我删除了drag“end”事件,目的是修复拖动时的节点 其思想是,在开始时,节点不是通过模拟固定的,而是在拖动后,保存固定节点的位置 但是,我对部队有一个问题: 正在做d3.forceManyBody;这种方法是对每个节点施加力。但相反,我希望只向其他节点生成力,所有这些节点都是不固定的 我该怎么做 //创建放置力定向图的位置 var svg=d3。选择(“svg”), 宽度=+svg.attr(“宽度”), 高度=+sv

我将D3V4用于带有节点和箭头的方向图

基本上我用这个例子:

但是我删除了drag“end”事件,目的是修复拖动时的节点

其思想是,在开始时,节点不是通过模拟固定的,而是在拖动后,保存固定节点的位置

但是,我对部队有一个问题:

正在做d3.forceManyBody;这种方法是对每个节点施加力。但相反,我希望只向其他节点生成力,所有这些节点都是不固定的

我该怎么做

//创建放置力定向图的位置
var svg=d3。选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”);
var半径=15;
变量节点\u数据=[
{“姓名”:“莉莉安”,“性别”:“F”},
{“姓名”:“戈登”,“性别”:“M”},
{“姓名”:“西尔维斯特”,“性别”:“M”},
{“姓名”:“玛丽”,“性别”:“F”},
{“姓名”:“海伦”,“性别”:“F”},
{“姓名”:“杰米”,“性别”:“M”},
{“姓名”:“杰西”,“性别”:“F”},
{“姓名”:“阿什顿”,“性别”:“M”},
{“姓名”:“邓肯”,“性别”:“M”},
{“姓名”:“埃维特”,“性别”:“F”},
{“姓名”:“摩尔”,“性别”:“M”},
{“姓名”:“争吵”,“性别”:“F”},
{“姓名”:“公爵”,“性别”:“M”},
{“姓名”:“男爵”,“性别”:“M”},
{“姓名”:“婴儿”,“性别”:“M”},
{“姓名”:“珀西”,“性别”:“M”},
{“姓名”:“辛西娅”,“性别”:“F”},
{“姓名”:“费顿”,“性别”:“M”},
{“姓名”:“莱斯利”,“性别”:“F”},
{“姓名”:“Yvette”,“性别”:“F”},
{“姓名”:“玛丽亚”,“性别”:“F”},
{“name”:“Lexy”,“sex”:“F”},
{“姓名”:“彼得”,“性别”:“M”},
{“姓名”:“Ashley”,“性别”:“F”},
{“姓名”:“芬克勒”,“性别”:“M”},
{“姓名”:“Damo”,“性别”:“M”},
{“姓名”:“伊莫金”,“性别”:“F”}
]
//示例链接数据
//类型:A代表盟友,E代表敌人
变量链接\u数据=[
{“来源”:“西尔维斯特”,“目标”:“戈登”,“类型”:“A”},
{“source”:“Sylvester”,“target”:“Lillian”,“type”:“A”},
{“来源”:“西尔维斯特”,“目标”:“玛丽”,“类型”:“A”},
{“来源”:“西尔维斯特”,“目标”:“杰米”,“类型”:“A”},
{“来源”:“西尔维斯特”,“目标”:“杰西”,“类型”:“A”},
{“来源”:“西尔维斯特”,“目标”:“海伦”,“类型”:“A”},
{“来源”:“海伦”,“目标”:“戈登”,“类型”:“A”},
{“source”:“Mary”,“target”:“Lillian”,“type”:“A”},
{“source”:“Ashton”,“target”:“Mary”,“type”:“A”},
{“source”:“Duncan”,“target”:“Jamie”,“type”:“A”},
{“来源”:“戈登”,“目标”:“杰西”,“类型”:“A”},
{“来源”:“西尔维斯特”,“目标”:“弗雷”,“类型”:“E”},
{“source”:“Fray”,“target”:“Mauer”,“type”:“A”},
{“source”:“Fray”,“target”:“Cynthia”,“type”:“A”},
{“source”:“Fray”,“target”:“Percy”,“type”:“A”},
{“source”:“Percy”,“target”:“Cynthia”,“type”:“A”},
{“source”:“Infante”,“target”:“Duke”,“type”:“A”},
{“source”:“Duke”,“target”:“Gordon”,“type”:“A”},
{“source”:“Duke”,“target”:“Sylvester”,“type”:“A”},
{“来源”:“男爵”,“目标”:“公爵”,“类型”:“A”},
{“来源”:“男爵”,“目标”:“西尔维斯特”,“类型”:“E”},
{“source”:“Evette”,“target”:“Sylvester”,“type”:“E”},
{“来源”:“辛西亚”,“目标”:“西尔维斯特”,“类型”:“E”},
{“source”:“Cynthia”,“target”:“Jamie”,“type”:“E”},
{“来源”:“摩尔”,“目标”:“杰西”,“类型”:“E”},
{“source”:“Duke”,“target”:“Lexy”,“type”:“A”},
{“source”:“Feyton”,“target”:“Lexy”,“type”:“A”},
{“source”:“Maria”,“target”:“Feyton”,“type”:“A”},
{“来源”:“男爵”,“目标”:“伊维特”,“类型”:“E”},
{“source”:“Evette”,“target”:“Maria”,“type”:“E”},
{“source”:“Cynthia”,“target”:“Yvette”,“type”:“E”},
{“来源”:“玛丽亚”,“目标”:“杰米”,“类型”:“E”},
{“来源”:“玛丽亚”,“目标”:“莱斯利”,“类型”:“E”},
{“source”:“Ashley”,“target”:“Damo”,“type”:“A”},
{“source”:“Damo”,“target”:“Lexy”,“type”:“A”},
{“source”:“Maria”,“target”:“Feyton”,“type”:“A”},
{“source”:“Finkler”,“target”:“Ashley”,“type”:“E”},
{“来源”:“西尔维斯特”,“目标”:“玛丽亚”,“类型”:“E”},
{“来源”:“彼得”,“目标”:“芬克勒”,“类型”:“E”},
{“source”:“Ashley”,“target”:“Gordon”,“type”:“E”},
{“source”:“Maria”,“target”:“Imogen”,“type”:“E”}
]
//设置模拟并添加力
var simulation=d3.forceSimulation()
.节点(节点\数据);
var link\u force=d3.forceLink(links\u数据)
.id(函数(d){返回d.name;});
var charge_force=d3.forceManyBody()
.兵力(-100);
变量中心力=d3力中心(宽度/2,高度/2);
模拟
.force(“冲锋队”,冲锋队)
.力(“中心力”,中心力)
.力(“链接”,链接力)
;
//添加勾号说明:
模拟。on(“滴答声”,滴答声动作);
//为缩放添加包围组
var g=svg.append(“g”)
.attr(“类”、“一切”);
//为链接画线
var link=g.append(“g”)
.attr(“类”、“链接”)
.selectAll(“行”)
.数据(链接和数据)
.enter().append(“行”)
.attr(“笔划宽度”,2)
.风格(“笔划”,颜色);
//为节点绘制圆
var节点=g.append(“g”)
.attr(“类”、“节点”)
.selectAll(“圆圈”)
.数据(节点\数据)
.输入()
.附加(“圆圈”)
.attr(“r”,半径)
.attr(“填充”,圆形);
//添加拖动功能
var drag_handler=d3.drag()
。打开(“开始”,拖动开始)
.打开(“拖动”,拖动)
//.打开(“结束”,拖动至“结束”);	
拖拽处理器(节点);
//添加缩放功能
var zoom_handler=d3.zoom()
.打开(“缩放”,缩放动作);
缩放处理程序(svg);
/**功能**/
//函数选择我们拥有的颜色圈
//让我们为雄性返回蓝色,为雌性返回红色
函数圈颜色(d){
如果(性别=“M”){
返回“蓝色”;
}否则{
返回“粉红色”;
}
}
//用于选择线条颜色和厚度的函数
//如果链接类型为“A”,则返回g
simulation.nodes(nodes.filter(function(d){return d.dragged === true;}))