createGraphFromNodeMatrix.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var zrUtil = require("zrender/lib/core/util");
  2. var List = require("../../data/List");
  3. var Graph = require("../../data/Graph");
  4. var linkList = require("../../data/helper/linkList");
  5. var completeDimensions = require("../../data/helper/completeDimensions");
  6. var CoordinateSystem = require("../../CoordinateSystem");
  7. var createListFromArray = require("./createListFromArray");
  8. /**
  9. * 从邻接矩阵生成
  10. * ```
  11. * TARGET
  12. * -1--2--3--4--5-
  13. * 1| x x x x x
  14. * 2| x x x x x
  15. * 3| x x x x x SOURCE
  16. * 4| x x x x x
  17. * 5| x x x x x
  18. * ```
  19. *
  20. * @param {Array.<Object>} nodes 节点信息
  21. * @param {Array} matrix 邻接矩阵
  22. * @param {module:echarts/model/Series}
  23. * @param {boolean} directed 是否是有向图
  24. * @return {module:echarts/data/Graph}
  25. */
  26. function _default(nodes, matrix, hostModel, directed) {
  27. var graph = new Graph(directed);
  28. for (var i = 0; i < nodes.length; i++) {
  29. graph.addNode(zrUtil.retrieve( // Id, name, dataIndex
  30. nodes[i].id, nodes[i].name, i), i);
  31. }
  32. var size = matrix.length;
  33. var links = [];
  34. var linkCount = 0;
  35. for (var i = 0; i < size; i++) {
  36. for (var j = 0; j < size; j++) {
  37. var val = matrix[i][j];
  38. if (val === 0) {
  39. continue;
  40. }
  41. var n1 = graph.nodes[i];
  42. var n2 = graph.nodes[j];
  43. var edge = graph.addEdge(n1, n2, linkCount);
  44. if (edge) {
  45. linkCount++;
  46. links.push({
  47. value: val
  48. });
  49. }
  50. }
  51. }
  52. var coordSys = hostModel.get('coordinateSystem');
  53. var nodeData;
  54. if (coordSys === 'cartesian2d' || coordSys === 'polar') {
  55. nodeData = createListFromArray(nodes, hostModel, hostModel.ecModel);
  56. } else {
  57. // FIXME
  58. var coordSysCtor = CoordinateSystem.get(coordSys); // FIXME
  59. var dimensionNames = completeDimensions((coordSysCtor && coordSysCtor.type !== 'view' ? coordSysCtor.dimensions || [] : []).concat(['value']), nodes);
  60. nodeData = new List(dimensionNames, hostModel);
  61. nodeData.initData(nodes);
  62. }
  63. var edgeData = new List(['value'], hostModel);
  64. edgeData.initData(links);
  65. linkList({
  66. mainData: nodeData,
  67. struct: graph,
  68. structAttr: 'graph',
  69. datas: {
  70. node: nodeData,
  71. edge: edgeData
  72. },
  73. datasAttr: {
  74. node: 'data',
  75. edge: 'edgeData'
  76. }
  77. }); // Update dataIndex of nodes and edges because invalid edge may be removed
  78. graph.update();
  79. return graph;
  80. }
  81. module.exports = _default;