概要 实例 介绍 源码

焦点定向图

源文件:index.html

  1. <!DOCTYPE html>
  2. <meta charset="utf-8">
  3. <style>
  4. .links line {
  5. stroke: #999;
  6. stroke-opacity: 0.6;
  7. }
  8. .nodes circle {
  9. stroke: #fff;
  10. stroke-width: 1.5px;
  11. }
  12. </style>
  13. <svg width="960" height="600"></svg>
  14. <script src="https://d3js.org/d3.v4.min.js"></script>
  15. <script>
  16. var svg = d3.select("svg"),
  17. width = +svg.attr("width"),
  18. height = +svg.attr("height");
  19. var color = d3.scaleOrdinal(d3.schemeCategory20);
  20. var simulation = d3.forceSimulation()
  21. .force("link", d3.forceLink().id(function(d) { return d.id; }))
  22. .force("charge", d3.forceManyBody())
  23. .force("center", d3.forceCenter(width / 2, height / 2));
  24. d3.json("miserables.json", function(error, graph) {
  25. if (error) throw error;
  26. var link = svg.append("g")
  27. .attr("class", "links")
  28. .selectAll("line")
  29. .data(graph.links)
  30. .enter().append("line")
  31. .attr("stroke-width", function(d) { return Math.sqrt(d.value); });
  32. var node = svg.append("g")
  33. .attr("class", "nodes")
  34. .selectAll("circle")
  35. .data(graph.nodes)
  36. .enter().append("circle")
  37. .attr("r", 5)
  38. .attr("fill", function(d) { return color(d.group); })
  39. .call(d3.drag()
  40. .on("start", dragstarted)
  41. .on("drag", dragged)
  42. .on("end", dragended));
  43. node.append("title")
  44. .text(function(d) { return d.id; });
  45. simulation
  46. .nodes(graph.nodes)
  47. .on("tick", ticked);
  48. simulation.force("link")
  49. .links(graph.links);
  50. function ticked() {
  51. link
  52. .attr("x1", function(d) { return d.source.x; })
  53. .attr("y1", function(d) { return d.source.y; })
  54. .attr("x2", function(d) { return d.target.x; })
  55. .attr("y2", function(d) { return d.target.y; });
  56. node
  57. .attr("cx", function(d) { return d.x; })
  58. .attr("cy", function(d) { return d.y; });
  59. }
  60. });
  61. function dragstarted(d) {
  62. if (!d3.event.active) simulation.alphaTarget(0.3).restart();
  63. d.fx = d.x;
  64. d.fy = d.y;
  65. }
  66. function dragged(d) {
  67. d.fx = d3.event.x;
  68. d.fy = d3.event.y;
  69. }
  70. function dragended(d) {
  71. if (!d3.event.active) simulation.alphaTarget(0);
  72. d.fx = null;
  73. d.fy = null;
  74. }
  75. </script>

源文件:miserables.json

  1. {
  2. "nodes": [
  3. {"id": "Myriel", "group": 1},
  4. {"id": "Napoleon", "group": 1},
  5. {"id": "Mlle.Baptistine", "group": 1},
  6. {"id": "Mme.Magloire", "group": 1},
  7. {"id": "CountessdeLo", "group": 1},
  8. {"id": "Geborand", "group": 1},
  9. {"id": "Champtercier", "group": 1},
  10. {"id": "Cravatte", "group": 1},
  11. {"id": "Count", "group": 1},
  12. {"id": "OldMan", "group": 1},
  13. {"id": "Labarre", "group": 2},
  14. {"id": "Valjean", "group": 2},
  15. {"id": "Marguerite", "group": 3},
  16. {"id": "Mme.deR", "group": 2},
  17. {"id": "Isabeau", "group": 2},
  18. {"id": "Gervais", "group": 2},
  19. {"id": "Tholomyes", "group": 3},
  20. {"id": "Listolier", "group": 3},
  21. {"id": "Fameuil", "group": 3},
  22. {"id": "Blacheville", "group": 3},
  23. {"id": "Favourite", "group": 3},
  24. {"id": "Dahlia", "group": 3},
  25. {"id": "Zephine", "group": 3},
  26. {"id": "Fantine", "group": 3},
  27. {"id": "Mme.Thenardier", "group": 4},
  28. {"id": "Thenardier", "group": 4},
  29. {"id": "Cosette", "group": 5},
  30. {"id": "Javert", "group": 4},
  31. {"id": "Fauchelevent", "group": 0},
  32. {"id": "Bamatabois", "group": 2},
  33. {"id": "Perpetue", "group": 3},
  34. {"id": "Simplice", "group": 2},
  35. {"id": "Scaufflaire", "group": 2},
  36. {"id": "Woman1", "group": 2},
  37. {"id": "Judge", "group": 2},
  38. {"id": "Champmathieu", "group": 2},
  39. {"id": "Brevet", "group": 2},
  40. {"id": "Chenildieu", "group": 2},
  41. {"id": "Cochepaille", "group": 2},
  42. {"id": "Pontmercy", "group": 4},
  43. {"id": "Boulatruelle", "group": 6},
  44. {"id": "Eponine", "group": 4},
  45. {"id": "Anzelma", "group": 4},
  46. {"id": "Woman2", "group": 5},
  47. {"id": "MotherInnocent", "group": 0},
  48. {"id": "Gribier", "group": 0},
  49. {"id": "Jondrette", "group": 7},
  50. {"id": "Mme.Burgon", "group": 7},
  51. {"id": "Gavroche", "group": 8},
  52. {"id": "Gillenormand", "group": 5},
  53. {"id": "Magnon", "group": 5},
  54. {"id": "Mlle.Gillenormand", "group": 5},
  55. {"id": "Mme.Pontmercy", "group": 5},
  56. {"id": "Mlle.Vaubois", "group": 5},
  57. {"id": "Lt.Gillenormand", "group": 5},
  58. {"id": "Marius", "group": 8},
  59. {"id": "BaronessT", "group": 5},
  60. {"id": "Mabeuf", "group": 8},
  61. {"id": "Enjolras", "group": 8},
  62. {"id": "Combeferre", "group": 8},
  63. {"id": "Prouvaire", "group": 8},
  64. {"id": "Feuilly", "group": 8},
  65. {"id": "Courfeyrac", "group": 8},
  66. {"id": "Bahorel", "group": 8},
  67. {"id": "Bossuet", "group": 8},
  68. {"id": "Joly", "group": 8},
  69. {"id": "Grantaire", "group": 8},
  70. {"id": "MotherPlutarch", "group": 9},
  71. {"id": "Gueulemer", "group": 4},
  72. {"id": "Babet", "group": 4},
  73. {"id": "Claquesous", "group": 4},
  74. {"id": "Montparnasse", "group": 4},
  75. {"id": "Toussaint", "group": 5},
  76. {"id": "Child1", "group": 10},
  77. {"id": "Child2", "group": 10},
  78. {"id": "Brujon", "group": 4},
  79. {"id": "Mme.Hucheloup", "group": 8}
  80. ],
  81. "links": [
  82. {"source": "Napoleon", "target": "Myriel", "value": 1},
  83. {"source": "Mlle.Baptistine", "target": "Myriel", "value": 8},
  84. {"source": "Mme.Magloire", "target": "Myriel", "value": 10},
  85. {"source": "Mme.Magloire", "target": "Mlle.Baptistine", "value": 6},
  86. {"source": "CountessdeLo", "target": "Myriel", "value": 1},
  87. {"source": "Geborand", "target": "Myriel", "value": 1},
  88. {"source": "Champtercier", "target": "Myriel", "value": 1},
  89. {"source": "Cravatte", "target": "Myriel", "value": 1},
  90. {"source": "Count", "target": "Myriel", "value": 2},
  91. {"source": "OldMan", "target": "Myriel", "value": 1},
  92. {"source": "Valjean", "target": "Labarre", "value": 1},
  93. {"source": "Valjean", "target": "Mme.Magloire", "value": 3},
  94. {"source": "Valjean", "target": "Mlle.Baptistine", "value": 3},
  95. {"source": "Valjean", "target": "Myriel", "value": 5},
  96. {"source": "Marguerite", "target": "Valjean", "value": 1},
  97. {"source": "Mme.deR", "target": "Valjean", "value": 1},
  98. {"source": "Isabeau", "target": "Valjean", "value": 1},
  99. {"source": "Gervais", "target": "Valjean", "value": 1},
  100. {"source": "Listolier", "target": "Tholomyes", "value": 4},
  101. {"source": "Fameuil", "target": "Tholomyes", "value": 4},
  102. {"source": "Fameuil", "target": "Listolier", "value": 4},
  103. {"source": "Blacheville", "target": "Tholomyes", "value": 4},
  104. {"source": "Blacheville", "target": "Listolier", "value": 4},
  105. {"source": "Blacheville", "target": "Fameuil", "value": 4},
  106. {"source": "Favourite", "target": "Tholomyes", "value": 3},
  107. {"source": "Favourite", "target": "Listolier", "value": 3},
  108. {"source": "Favourite", "target": "Fameuil", "value": 3},
  109. {"source": "Favourite", "target": "Blacheville", "value": 4},
  110. {"source": "Dahlia", "target": "Tholomyes", "value": 3},
  111. {"source": "Dahlia", "target": "Listolier", "value": 3},
  112. {"source": "Dahlia", "target": "Fameuil", "value": 3},
  113. {"source": "Dahlia", "target": "Blacheville", "value": 3},
  114. {"source": "Dahlia", "target": "Favourite", "value": 5},
  115. {"source": "Zephine", "target": "Tholomyes", "value": 3},
  116. {"source": "Zephine", "target": "Listolier", "value": 3},
  117. {"source": "Zephine", "target": "Fameuil", "value": 3},
  118. {"source": "Zephine", "target": "Blacheville", "value": 3},
  119. {"source": "Zephine", "target": "Favourite", "value": 4},
  120. {"source": "Zephine", "target": "Dahlia", "value": 4},
  121. {"source": "Fantine", "target": "Tholomyes", "value": 3},
  122. {"source": "Fantine", "target": "Listolier", "value": 3},
  123. {"source": "Fantine", "target": "Fameuil", "value": 3},
  124. {"source": "Fantine", "target": "Blacheville", "value": 3},
  125. {"source": "Fantine", "target": "Favourite", "value": 4},
  126. {"source": "Fantine", "target": "Dahlia", "value": 4},
  127. {"source": "Fantine", "target": "Zephine", "value": 4},
  128. {"source": "Fantine", "target": "Marguerite", "value": 2},
  129. {"source": "Fantine", "target": "Valjean", "value": 9},
  130. {"source": "Mme.Thenardier", "target": "Fantine", "value": 2},
  131. {"source": "Mme.Thenardier", "target": "Valjean", "value": 7},
  132. {"source": "Thenardier", "target": "Mme.Thenardier", "value": 13},
  133. {"source": "Thenardier", "target": "Fantine", "value": 1},
  134. {"source": "Thenardier", "target": "Valjean", "value": 12},
  135. {"source": "Cosette", "target": "Mme.Thenardier", "value": 4},
  136. {"source": "Cosette", "target": "Valjean", "value": 31},
  137. {"source": "Cosette", "target": "Tholomyes", "value": 1},
  138. {"source": "Cosette", "target": "Thenardier", "value": 1},
  139. {"source": "Javert", "target": "Valjean", "value": 17},
  140. {"source": "Javert", "target": "Fantine", "value": 5},
  141. {"source": "Javert", "target": "Thenardier", "value": 5},
  142. {"source": "Javert", "target": "Mme.Thenardier", "value": 1},
  143. {"source": "Javert", "target": "Cosette", "value": 1},
  144. {"source": "Fauchelevent", "target": "Valjean", "value": 8},
  145. {"source": "Fauchelevent", "target": "Javert", "value": 1},
  146. {"source": "Bamatabois", "target": "Fantine", "value": 1},
  147. {"source": "Bamatabois", "target": "Javert", "value": 1},
  148. {"source": "Bamatabois", "target": "Valjean", "value": 2},
  149. {"source": "Perpetue", "target": "Fantine", "value": 1},
  150. {"source": "Simplice", "target": "Perpetue", "value": 2},
  151. {"source": "Simplice", "target": "Valjean", "value": 3},
  152. {"source": "Simplice", "target": "Fantine", "value": 2},
  153. {"source": "Simplice", "target": "Javert", "value": 1},
  154. {"source": "Scaufflaire", "target": "Valjean", "value": 1},
  155. {"source": "Woman1", "target": "Valjean", "value": 2},
  156. {"source": "Woman1", "target": "Javert", "value": 1},
  157. {"source": "Judge", "target": "Valjean", "value": 3},
  158. {"source": "Judge", "target": "Bamatabois", "value": 2},
  159. {"source": "Champmathieu", "target": "Valjean", "value": 3},
  160. {"source": "Champmathieu", "target": "Judge", "value": 3},
  161. {"source": "Champmathieu", "target": "Bamatabois", "value": 2},
  162. {"source": "Brevet", "target": "Judge", "value": 2},
  163. {"source": "Brevet", "target": "Champmathieu", "value": 2},
  164. {"source": "Brevet", "target": "Valjean", "value": 2},
  165. {"source": "Brevet", "target": "Bamatabois", "value": 1},
  166. {"source": "Chenildieu", "target": "Judge", "value": 2},
  167. {"source": "Chenildieu", "target": "Champmathieu", "value": 2},
  168. {"source": "Chenildieu", "target": "Brevet", "value": 2},
  169. {"source": "Chenildieu", "target": "Valjean", "value": 2},
  170. {"source": "Chenildieu", "target": "Bamatabois", "value": 1},
  171. {"source": "Cochepaille", "target": "Judge", "value": 2},
  172. {"source": "Cochepaille", "target": "Champmathieu", "value": 2},
  173. {"source": "Cochepaille", "target": "Brevet", "value": 2},
  174. {"source": "Cochepaille", "target": "Chenildieu", "value": 2},
  175. {"source": "Cochepaille", "target": "Valjean", "value": 2},
  176. {"source": "Cochepaille", "target": "Bamatabois", "value": 1},
  177. {"source": "Pontmercy", "target": "Thenardier", "value": 1},
  178. {"source": "Boulatruelle", "target": "Thenardier", "value": 1},
  179. {"source": "Eponine", "target": "Mme.Thenardier", "value": 2},
  180. {"source": "Eponine", "target": "Thenardier", "value": 3},
  181. {"source": "Anzelma", "target": "Eponine", "value": 2},
  182. {"source": "Anzelma", "target": "Thenardier", "value": 2},
  183. {"source": "Anzelma", "target": "Mme.Thenardier", "value": 1},
  184. {"source": "Woman2", "target": "Valjean", "value": 3},
  185. {"source": "Woman2", "target": "Cosette", "value": 1},
  186. {"source": "Woman2", "target": "Javert", "value": 1},
  187. {"source": "MotherInnocent", "target": "Fauchelevent", "value": 3},
  188. {"source": "MotherInnocent", "target": "Valjean", "value": 1},
  189. {"source": "Gribier", "target": "Fauchelevent", "value": 2},
  190. {"source": "Mme.Burgon", "target": "Jondrette", "value": 1},
  191. {"source": "Gavroche", "target": "Mme.Burgon", "value": 2},
  192. {"source": "Gavroche", "target": "Thenardier", "value": 1},
  193. {"source": "Gavroche", "target": "Javert", "value": 1},
  194. {"source": "Gavroche", "target": "Valjean", "value": 1},
  195. {"source": "Gillenormand", "target": "Cosette", "value": 3},
  196. {"source": "Gillenormand", "target": "Valjean", "value": 2},
  197. {"source": "Magnon", "target": "Gillenormand", "value": 1},
  198. {"source": "Magnon", "target": "Mme.Thenardier", "value": 1},
  199. {"source": "Mlle.Gillenormand", "target": "Gillenormand", "value": 9},
  200. {"source": "Mlle.Gillenormand", "target": "Cosette", "value": 2},
  201. {"source": "Mlle.Gillenormand", "target": "Valjean", "value": 2},
  202. {"source": "Mme.Pontmercy", "target": "Mlle.Gillenormand", "value": 1},
  203. {"source": "Mme.Pontmercy", "target": "Pontmercy", "value": 1},
  204. {"source": "Mlle.Vaubois", "target": "Mlle.Gillenormand", "value": 1},
  205. {"source": "Lt.Gillenormand", "target": "Mlle.Gillenormand", "value": 2},
  206. {"source": "Lt.Gillenormand", "target": "Gillenormand", "value": 1},
  207. {"source": "Lt.Gillenormand", "target": "Cosette", "value": 1},
  208. {"source": "Marius", "target": "Mlle.Gillenormand", "value": 6},
  209. {"source": "Marius", "target": "Gillenormand", "value": 12},
  210. {"source": "Marius", "target": "Pontmercy", "value": 1},
  211. {"source": "Marius", "target": "Lt.Gillenormand", "value": 1},
  212. {"source": "Marius", "target": "Cosette", "value": 21},
  213. {"source": "Marius", "target": "Valjean", "value": 19},
  214. {"source": "Marius", "target": "Tholomyes", "value": 1},
  215. {"source": "Marius", "target": "Thenardier", "value": 2},
  216. {"source": "Marius", "target": "Eponine", "value": 5},
  217. {"source": "Marius", "target": "Gavroche", "value": 4},
  218. {"source": "BaronessT", "target": "Gillenormand", "value": 1},
  219. {"source": "BaronessT", "target": "Marius", "value": 1},
  220. {"source": "Mabeuf", "target": "Marius", "value": 1},
  221. {"source": "Mabeuf", "target": "Eponine", "value": 1},
  222. {"source": "Mabeuf", "target": "Gavroche", "value": 1},
  223. {"source": "Enjolras", "target": "Marius", "value": 7},
  224. {"source": "Enjolras", "target": "Gavroche", "value": 7},
  225. {"source": "Enjolras", "target": "Javert", "value": 6},
  226. {"source": "Enjolras", "target": "Mabeuf", "value": 1},
  227. {"source": "Enjolras", "target": "Valjean", "value": 4},
  228. {"source": "Combeferre", "target": "Enjolras", "value": 15},
  229. {"source": "Combeferre", "target": "Marius", "value": 5},
  230. {"source": "Combeferre", "target": "Gavroche", "value": 6},
  231. {"source": "Combeferre", "target": "Mabeuf", "value": 2},
  232. {"source": "Prouvaire", "target": "Gavroche", "value": 1},
  233. {"source": "Prouvaire", "target": "Enjolras", "value": 4},
  234. {"source": "Prouvaire", "target": "Combeferre", "value": 2},
  235. {"source": "Feuilly", "target": "Gavroche", "value": 2},
  236. {"source": "Feuilly", "target": "Enjolras", "value": 6},
  237. {"source": "Feuilly", "target": "Prouvaire", "value": 2},
  238. {"source": "Feuilly", "target": "Combeferre", "value": 5},
  239. {"source": "Feuilly", "target": "Mabeuf", "value": 1},
  240. {"source": "Feuilly", "target": "Marius", "value": 1},
  241. {"source": "Courfeyrac", "target": "Marius", "value": 9},
  242. {"source": "Courfeyrac", "target": "Enjolras", "value": 17},
  243. {"source": "Courfeyrac", "target": "Combeferre", "value": 13},
  244. {"source": "Courfeyrac", "target": "Gavroche", "value": 7},
  245. {"source": "Courfeyrac", "target": "Mabeuf", "value": 2},
  246. {"source": "Courfeyrac", "target": "Eponine", "value": 1},
  247. {"source": "Courfeyrac", "target": "Feuilly", "value": 6},
  248. {"source": "Courfeyrac", "target": "Prouvaire", "value": 3},
  249. {"source": "Bahorel", "target": "Combeferre", "value": 5},
  250. {"source": "Bahorel", "target": "Gavroche", "value": 5},
  251. {"source": "Bahorel", "target": "Courfeyrac", "value": 6},
  252. {"source": "Bahorel", "target": "Mabeuf", "value": 2},
  253. {"source": "Bahorel", "target": "Enjolras", "value": 4},
  254. {"source": "Bahorel", "target": "Feuilly", "value": 3},
  255. {"source": "Bahorel", "target": "Prouvaire", "value": 2},
  256. {"source": "Bahorel", "target": "Marius", "value": 1},
  257. {"source": "Bossuet", "target": "Marius", "value": 5},
  258. {"source": "Bossuet", "target": "Courfeyrac", "value": 12},
  259. {"source": "Bossuet", "target": "Gavroche", "value": 5},
  260. {"source": "Bossuet", "target": "Bahorel", "value": 4},
  261. {"source": "Bossuet", "target": "Enjolras", "value": 10},
  262. {"source": "Bossuet", "target": "Feuilly", "value": 6},
  263. {"source": "Bossuet", "target": "Prouvaire", "value": 2},
  264. {"source": "Bossuet", "target": "Combeferre", "value": 9},
  265. {"source": "Bossuet", "target": "Mabeuf", "value": 1},
  266. {"source": "Bossuet", "target": "Valjean", "value": 1},
  267. {"source": "Joly", "target": "Bahorel", "value": 5},
  268. {"source": "Joly", "target": "Bossuet", "value": 7},
  269. {"source": "Joly", "target": "Gavroche", "value": 3},
  270. {"source": "Joly", "target": "Courfeyrac", "value": 5},
  271. {"source": "Joly", "target": "Enjolras", "value": 5},
  272. {"source": "Joly", "target": "Feuilly", "value": 5},
  273. {"source": "Joly", "target": "Prouvaire", "value": 2},
  274. {"source": "Joly", "target": "Combeferre", "value": 5},
  275. {"source": "Joly", "target": "Mabeuf", "value": 1},
  276. {"source": "Joly", "target": "Marius", "value": 2},
  277. {"source": "Grantaire", "target": "Bossuet", "value": 3},
  278. {"source": "Grantaire", "target": "Enjolras", "value": 3},
  279. {"source": "Grantaire", "target": "Combeferre", "value": 1},
  280. {"source": "Grantaire", "target": "Courfeyrac", "value": 2},
  281. {"source": "Grantaire", "target": "Joly", "value": 2},
  282. {"source": "Grantaire", "target": "Gavroche", "value": 1},
  283. {"source": "Grantaire", "target": "Bahorel", "value": 1},
  284. {"source": "Grantaire", "target": "Feuilly", "value": 1},
  285. {"source": "Grantaire", "target": "Prouvaire", "value": 1},
  286. {"source": "MotherPlutarch", "target": "Mabeuf", "value": 3},
  287. {"source": "Gueulemer", "target": "Thenardier", "value": 5},
  288. {"source": "Gueulemer", "target": "Valjean", "value": 1},
  289. {"source": "Gueulemer", "target": "Mme.Thenardier", "value": 1},
  290. {"source": "Gueulemer", "target": "Javert", "value": 1},
  291. {"source": "Gueulemer", "target": "Gavroche", "value": 1},
  292. {"source": "Gueulemer", "target": "Eponine", "value": 1},
  293. {"source": "Babet", "target": "Thenardier", "value": 6},
  294. {"source": "Babet", "target": "Gueulemer", "value": 6},
  295. {"source": "Babet", "target": "Valjean", "value": 1},
  296. {"source": "Babet", "target": "Mme.Thenardier", "value": 1},
  297. {"source": "Babet", "target": "Javert", "value": 2},
  298. {"source": "Babet", "target": "Gavroche", "value": 1},
  299. {"source": "Babet", "target": "Eponine", "value": 1},
  300. {"source": "Claquesous", "target": "Thenardier", "value": 4},
  301. {"source": "Claquesous", "target": "Babet", "value": 4},
  302. {"source": "Claquesous", "target": "Gueulemer", "value": 4},
  303. {"source": "Claquesous", "target": "Valjean", "value": 1},
  304. {"source": "Claquesous", "target": "Mme.Thenardier", "value": 1},
  305. {"source": "Claquesous", "target": "Javert", "value": 1},
  306. {"source": "Claquesous", "target": "Eponine", "value": 1},
  307. {"source": "Claquesous", "target": "Enjolras", "value": 1},
  308. {"source": "Montparnasse", "target": "Javert", "value": 1},
  309. {"source": "Montparnasse", "target": "Babet", "value": 2},
  310. {"source": "Montparnasse", "target": "Gueulemer", "value": 2},
  311. {"source": "Montparnasse", "target": "Claquesous", "value": 2},
  312. {"source": "Montparnasse", "target": "Valjean", "value": 1},
  313. {"source": "Montparnasse", "target": "Gavroche", "value": 1},
  314. {"source": "Montparnasse", "target": "Eponine", "value": 1},
  315. {"source": "Montparnasse", "target": "Thenardier", "value": 1},
  316. {"source": "Toussaint", "target": "Cosette", "value": 2},
  317. {"source": "Toussaint", "target": "Javert", "value": 1},
  318. {"source": "Toussaint", "target": "Valjean", "value": 1},
  319. {"source": "Child1", "target": "Gavroche", "value": 2},
  320. {"source": "Child2", "target": "Gavroche", "value": 2},
  321. {"source": "Child2", "target": "Child1", "value": 3},
  322. {"source": "Brujon", "target": "Babet", "value": 3},
  323. {"source": "Brujon", "target": "Gueulemer", "value": 3},
  324. {"source": "Brujon", "target": "Thenardier", "value": 3},
  325. {"source": "Brujon", "target": "Gavroche", "value": 1},
  326. {"source": "Brujon", "target": "Eponine", "value": 1},
  327. {"source": "Brujon", "target": "Claquesous", "value": 1},
  328. {"source": "Brujon", "target": "Montparnasse", "value": 1},
  329. {"source": "Mme.Hucheloup", "target": "Bossuet", "value": 1},
  330. {"source": "Mme.Hucheloup", "target": "Joly", "value": 1},
  331. {"source": "Mme.Hucheloup", "target": "Grantaire", "value": 1},
  332. {"source": "Mme.Hucheloup", "target": "Bahorel", "value": 1},
  333. {"source": "Mme.Hucheloup", "target": "Courfeyrac", "value": 1},
  334. {"source": "Mme.Hucheloup", "target": "Gavroche", "value": 1},
  335. {"source": "Mme.Hucheloup", "target": "Enjolras", "value": 1}
  336. ]
  337. }