在vue中使用eacharts創建graph關系圖方式

使用eacharts創建graph關系圖

在最近的工作中遇到瞭這個問題一開始遇到遇到問題且網上現在的教程不那麼詳細於是想著自己寫一個來記錄一下。

首先想使用echarts先下載echarts包命令如下

npm install echarts --save

然後將eacharts引入到項目中,推薦在main.js引入。

import * as echarts from 'echarts';

引入完畢後將echarts掛載在原型上(僅限vue2使用)

Vue.prototype.$echarts = echarts//將echarts掛載到vue的原型上

然後再所需要的組件裡創建一個容器

<div id="chartsBox"></div>

將echarts綁定到dom元素上

this.myEchart = this.$echarts.init(document.querySelector("#chartsBox")); //將echarts綁定到dom元素上

配置echarts的配置

 this.option = {
        //echarts的配置文件
        title: {
          //title組件
          text: "Les Miserables", //顯示的文本
          subtext: "Default layout",
          top: "bottom", //組件在echarts上下的位置
          left: "right", //組件在echarts左右上的位置
        },
        tooltip: {
          //提示框組件當鼠標移入時觸發
          show: true, //是否顯示提示框組件。
          trigger: "item", //觸發類型
 
        },
        legend: [
          //圖例組件
          {
            data: this.graph.categories.map(function (a) {
              //圖例所要分類的種類
              return a.name;
            }),
          },
        ],
        series: [
          //數據展示組件
          {
            name: "Les Miserables", //組件的名稱
            type: "graph", //組件的類行,選擇graph即關系圖
            layout: "force", //graph的瞭類型,此時為力引導
            data: this.graph.nodes, //要展示的數據
            links: this.graph.links, //要展示的關系線
            categories: this.graph.categories, //展示的所有分類
            roam: true, //是否可以縮放
            label: {
              //graph節點的標簽
              position: "right", //標簽所在的位置
              show: false, //是否默認顯示標簽
            },
            force: {
              //力引導的配置
              repulsion: 100, //節點之間的斥力
            },
            scaleLimit: {
              //滾輪縮放的極限控制
              max: 12, //滾輪縮放最大值
              min: 3, //滾輪縮放的最小值
            },
          },
        ],
      };

通過echarts的配置文件進行渲染

this.myEchart.setOption(this.option); //通過echarts的配置文件進行渲染

以上就是全部步驟瞭實例代碼如下 

<template>
  <div id="chartsBox"></div>
</template>
 
<script>
export default {
  name: "",
  data() {
    return {
      myEchart: {},
      graph: {
        nodes: [
          {
            id: "0",
            name: "Myriel",
            symbolSize: 5,
            x: -266.82776,
            y: 299.6904,
            value: 28.685715,
            category: 0,
          },
          {
            id: "1",
            name: "Napoleon",
            symbolSize: 5,
            x: -418.08344,
            y: 446.8853,
            value: 4,
            category: 0,
          },
          {
            id: "2",
            name: "MlleBaptistine",
            symbolSize: 5,
            x: -212.76357,
            y: 245.29176,
            value: 9.485714,
            category: 1,
          },
          {
            id: "3",
            name: "MmeMagloire",
            symbolSize: 5,
            x: -242.82404,
            y: 235.26283,
            value: 9.485714,
            category: 1,
          },
          {
            id: "4",
            name: "CountessDeLo",
            symbolSize: 5,
            x: -379.30386,
            y: 429.06424,
            value: 4,
            category: 0,
          },
          {
            id: "5",
            name: "Geborand",
            symbolSize: 5,
            x: -417.26337,
            y: 406.03506,
            value: 4,
            category: 0,
          },
          {
            id: "6",
            name: "Champtercier",
            symbolSize: 5,
            x: -332.6012,
            y: 485.16974,
            value: 4,
            category: 0,
          },
          {
            id: "7",
            name: "Cravatte",
            symbolSize: 5,
            x: -382.69568,
            y: 475.09113,
            value: 4,
            category: 0,
          },
          {
            id: "8",
            name: "Count",
            symbolSize: 5,
            x: -320.384,
            y: 387.17325,
            value: 4,
            category: 0,
          },
          {
            id: "9",
            name: "OldMan",
            symbolSize: 5,
            x: -344.39832,
            y: 451.16772,
            value: 4,
            category: 0,
          },
          {
            id: "10",
            name: "Labarre",
            symbolSize: 5,
            x: -89.34107,
            y: 234.56128,
            value: 4,
            category: 1,
          },
          {
            id: "11",
            name: "Valjean",
            symbolSize: 5,
            x: -87.93029,
            y: -6.8120565,
            value: 100,
            category: 1,
          },
          {
            id: "12",
            name: "Marguerite",
            symbolSize: 5,
            x: -339.77908,
            y: -184.69139,
            value: 6.742859,
            category: 1,
          },
          {
            id: "13",
            name: "MmeDeR",
            symbolSize: 5,
            x: -194.31313,
            y: 178.55301,
            value: 4,
            category: 1,
          },
          {
            id: "14",
            name: "Isabeau",
            symbolSize: 5,
            x: -158.05168,
            y: 201.99768,
            value: 4,
            category: 1,
          },
          {
            id: "15",
            name: "Gervais",
            symbolSize: 5,
            x: -127.701546,
            y: 242.55057,
            value: 4,
            category: 1,
          },
          {
            id: "16",
            name: "Tholomyes",
            symbolSize: 5,
            x: -385.2226,
            y: -393.5572,
            value: 25.942856,
            category: 2,
          },
          {
            id: "17",
            name: "Listolier",
            symbolSize: 5,
            x: -516.55884,
            y: -393.98975,
            value: 20.457146,
            category: 2,
          },
          {
            id: "18",
            name: "Fameuil",
            symbolSize: 5,
            x: -464.79382,
            y: -493.57944,
            value: 20.457146,
            category: 2,
          },
          {
            id: "19",
            name: "Blacheville",
            symbolSize: 5,
            x: -515.1624,
            y: -456.9891,
            value: 20.457146,
            category: 2,
          },
          {
            id: "20",
            name: "Favourite",
            symbolSize: 5,
            x: -408.12122,
            y: -464.5048,
            value: 20.457146,
            category: 2,
          },
          {
            id: "21",
            name: "Dahlia",
            symbolSize: 5,
            x: -456.44113,
            y: -425.13303,
            value: 20.457146,
            category: 2,
          },
          {
            id: "22",
            name: "Zephine",
            symbolSize: 5,
            x: -459.1107,
            y: -362.5133,
            value: 20.457146,
            category: 2,
          },
          {
            id: "23",
            name: "Fantine",
            symbolSize: 5,
            x: -313.42786,
            y: -289.44803,
            value: 42.4,
            category: 2,
          },
          {
            id: "24",
            name: "MmeThenardier",
            symbolSize: 5,
            x: 4.6313396,
            y: -273.8517,
            value: 31.428574,
            category: 7,
          },
          {
            id: "25",
            name: "Thenardier",
            symbolSize: 5,
            x: 82.80825,
            y: -203.1144,
            value: 45.142853,
            category: 7,
          },
          {
            id: "26",
            name: "Cosette",
            symbolSize: 5,
            x: 78.64646,
            y: -31.512747,
            value: 31.428574,
            category: 6,
          },
          {
            id: "27",
            name: "Javert",
            symbolSize: 5,
            x: -81.46074,
            y: -204.20204,
            value: 47.88571,
            category: 7,
          },
          {
            id: "28",
            name: "Fauchelevent",
            symbolSize: 5,
            x: -225.73984,
            y: 82.41631,
            value: 12.228573,
            category: 4,
          },
          {
            id: "29",
            name: "Bamatabois",
            symbolSize: 5,
            x: -385.6842,
            y: -20.206686,
            value: 23.2,
            category: 3,
          },
          {
            id: "30",
            name: "Perpetue",
            symbolSize: 5,
            x: -403.92447,
            y: -197.69823,
            value: 6.742859,
            category: 2,
          },
          {
            id: "31",
            name: "Simplice",
            symbolSize: 5,
            x: -281.4253,
            y: -158.45137,
            value: 12.228573,
            category: 2,
          },
          {
            id: "32",
            name: "Scaufflaire",
            symbolSize: 5,
            x: -122.41348,
            y: 210.37503,
            value: 4,
            category: 1,
          },
          {
            id: "33",
            name: "Woman1",
            symbolSize: 5,
            x: -234.6001,
            y: -113.15067,
            value: 6.742859,
            category: 1,
          },
          {
            id: "34",
            name: "Judge",
            symbolSize: 5,
            x: -387.84915,
            y: 58.7059,
            value: 17.714287,
            category: 3,
          },
          {
            id: "35",
            name: "Champmathieu",
            symbolSize: 5,
            x: -338.2307,
            y: 87.48405,
            value: 17.714287,
            category: 3,
          },
          {
            id: "36",
            name: "Brevet",
            symbolSize: 5,
            x: -453.26874,
            y: 58.94648,
            value: 17.714287,
            category: 3,
          },
          {
            id: "37",
            name: "Chenildieu",
            symbolSize: 5,
            x: -386.44904,
            y: 140.05937,
            value: 17.714287,
            category: 3,
          },
          {
            id: "38",
            name: "Cochepaille",
            symbolSize: 5,
            x: -446.7876,
            y: 123.38005,
            value: 17.714287,
            category: 3,
          },
          {
            id: "39",
            name: "Pontmercy",
            symbolSize: 5,
            x: 336.49738,
            y: -269.55914,
            value: 9.485714,
            category: 6,
          },
          {
            id: "40",
            name: "Boulatruelle",
            symbolSize: 5,
            x: 29.187843,
            y: -460.13132,
            value: 4,
            category: 7,
          },
          {
            id: "41",
            name: "Eponine",
            symbolSize: 5,
            x: 238.36697,
            y: -210.00926,
            value: 31.428574,
            category: 7,
          },
          {
            id: "42",
            name: "Anzelma",
            symbolSize: 5,
            x: 189.69513,
            y: -346.50662,
            value: 9.485714,
            category: 7,
          },
          {
            id: "43",
            name: "Woman2",
            symbolSize: 5,
            x: -187.00418,
            y: -145.02663,
            value: 9.485714,
            category: 6,
          },
          {
            id: "44",
            name: "MotherInnocent",
            symbolSize: 5,
            x: -252.99521,
            y: 129.87549,
            value: 6.742859,
            category: 4,
          },
          {
            id: "45",
            name: "Gribier",
            symbolSize: 5,
            x: -296.07935,
            y: 163.11964,
            value: 4,
            category: 4,
          },
          {
            id: "46",
            name: "Jondrette",
            symbolSize: 5,
            x: 550.3201,
            y: 522.4031,
            value: 4,
            category: 5,
          },
          {
            id: "47",
            name: "MmeBurgon",
            symbolSize: 5,
            x: 488.13535,
            y: 356.8573,
            value: 6.742859,
            category: 5,
          },
          {
            id: "48",
            name: "Gavroche",
            symbolSize: 5,
            x: 387.89572,
            y: 110.462326,
            value: 61.600006,
            category: 8,
          },
          {
            id: "49",
            name: "Gillenormand",
            symbolSize: 5,
            x: 126.4831,
            y: 68.10622,
            value: 20.457146,
            category: 6,
          },
          {
            id: "50",
            name: "Magnon",
            symbolSize: 5,
            x: 127.07365,
            y: -113.05923,
            value: 6.742859,
            category: 6,
          },
          {
            id: "51",
            name: "MlleGillenormand",
            symbolSize: 5,
            x: 162.63559,
            y: 117.6565,
            value: 20.457146,
            category: 6,
          },
          {
            id: "52",
            name: "MmePontmercy",
            symbolSize: 5,
            x: 353.66415,
            y: -205.89165,
            value: 6.742859,
            category: 6,
          },
          {
            id: "53",
            name: "MlleVaubois",
            symbolSize: 5,
            x: 165.43939,
            y: 339.7736,
            value: 4,
            category: 6,
          },
          {
            id: "54",
            name: "LtGillenormand",
            symbolSize: 5,
            x: 137.69348,
            y: 196.1069,
            value: 12.228573,
            category: 6,
          },
          {
            id: "55",
            name: "Marius",
            symbolSize: 5,
            x: 206.44687,
            y: -13.805411,
            value: 53.37143,
            category: 6,
          },
          {
            id: "56",
            name: "BaronessT",
            symbolSize: 5,
            x: 194.82993,
            y: 224.78036,
            value: 6.742859,
            category: 6,
          },
          {
            id: "57",
            name: "Mabeuf",
            symbolSize: 5,
            x: 597.6618,
            y: 135.18481,
            value: 31.428574,
            category: 8,
          },
          {
            id: "58",
            name: "Enjolras",
            symbolSize: 5,
            x: 355.78366,
            y: -74.882454,
            value: 42.4,
            category: 8,
          },
          {
            id: "59",
            name: "Combeferre",
            symbolSize: 5,
            x: 515.2961,
            y: -46.167564,
            value: 31.428574,
            category: 8,
          },
          {
            id: "60",
            name: "Prouvaire",
            symbolSize: 5,
            x: 614.29285,
            y: -69.3104,
            value: 25.942856,
            category: 8,
          },
          {
            id: "61",
            name: "Feuilly",
            symbolSize: 5,
            x: 550.1917,
            y: -128.17537,
            value: 31.428574,
            category: 8,
          },
          {
            id: "62",
            name: "Courfeyrac",
            symbolSize: 5,
            x: 436.17184,
            y: -12.7286825,
            value: 36.91429,
            category: 8,
          },
          {
            id: "63",
            name: "Bahorel",
            symbolSize: 5,
            x: 602.55225,
            y: 16.421427,
            value: 34.17143,
            category: 8,
          },
          {
            id: "64",
            name: "Bossuet",
            symbolSize: 5,
            x: 455.81955,
            y: -115.45826,
            value: 36.91429,
            category: 8,
          },
          {
            id: "65",
            name: "Joly",
            symbolSize: 5,
            x: 516.40784,
            y: 47.242233,
            value: 34.17143,
            category: 8,
          },
          {
            id: "66",
            name: "Grantaire",
            symbolSize: 5,
            x: 646.4313,
            y: -151.06331,
            value: 28.685715,
            category: 8,
          },
          {
            id: "67",
            name: "MotherPlutarch",
            symbolSize: 5,
            x: 668.9568,
            y: 204.65488,
            value: 4,
            category: 8,
          },
          {
            id: "68",
            name: "Gueulemer",
            symbolSize: 5,
            x: 78.4799,
            y: -347.15146,
            value: 28.685715,
            category: 7,
          },
          {
            id: "69",
            name: "Babet",
            symbolSize: 5,
            x: 150.35959,
            y: -298.50797,
            value: 28.685715,
            category: 7,
          },
          {
            id: "70",
            name: "Claquesous",
            symbolSize: 5,
            x: 137.3717,
            y: -410.2809,
            value: 28.685715,
            category: 7,
          },
          {
            id: "71",
            name: "Montparnasse",
            symbolSize: 5,
            x: 234.87747,
            y: -400.85983,
            value: 25.942856,
            category: 7,
          },
          {
            id: "72",
            name: "Toussaint",
            symbolSize: 5,
            x: 40.942253,
            y: 113.78272,
            value: 9.485714,
            category: 1,
          },
          {
            id: "73",
            name: "Child1",
            symbolSize: 5,
            x: 437.939,
            y: 291.58234,
            value: 6.742859,
            category: 8,
          },
          {
            id: "74",
            name: "Child2",
            symbolSize: 5,
            x: 466.04922,
            y: 283.3606,
            value: 6.742859,
            category: 8,
          },
          {
            id: "75",
            name: "Brujon",
            symbolSize: 5,
            x: 238.79364,
            y: -314.06345,
            value: 20.457146,
            category: 7,
          },
          {
            id: "76",
            name: "MmeHucheloup",
            symbolSize: 5,
            x: 712.18353,
            y: 4.8131495,
            value: 20.457146,
            category: 8,
          },
        ],
        links: [
          { source: "1", target: "0" },
          { source: "2", target: "0" },
          { source: "3", target: "0" },
          { source: "3", target: "2" },
          { source: "4", target: "0" },
          { source: "5", target: "0" },
          { source: "6", target: "0" },
          { source: "7", target: "0" },
          { source: "8", target: "0" },
          { source: "9", target: "0" },
          { source: "11", target: "0" },
          { source: "11", target: "2" },
          { source: "11", target: "3" },
          { source: "11", target: "10" },
          { source: "12", target: "11" },
          { source: "13", target: "11" },
          { source: "14", target: "11" },
          { source: "15", target: "11" },
          { source: "17", target: "16" },
          { source: "18", target: "16" },
          { source: "18", target: "17" },
          { source: "19", target: "16" },
          { source: "19", target: "17" },
          { source: "19", target: "18" },
          { source: "20", target: "16" },
          { source: "20", target: "17" },
          { source: "20", target: "18" },
          { source: "20", target: "19" },
          { source: "21", target: "16" },
          { source: "21", target: "17" },
          { source: "21", target: "18" },
          { source: "21", target: "19" },
          { source: "21", target: "20" },
          { source: "22", target: "16" },
          { source: "22", target: "17" },
          { source: "22", target: "18" },
          { source: "22", target: "19" },
          { source: "22", target: "20" },
          { source: "22", target: "21" },
          { source: "23", target: "11" },
          { source: "23", target: "12" },
          { source: "23", target: "16" },
          { source: "23", target: "17" },
          { source: "23", target: "18" },
          { source: "23", target: "19" },
          { source: "23", target: "20" },
          { source: "23", target: "21" },
          { source: "23", target: "22" },
          { source: "24", target: "11" },
          { source: "24", target: "23" },
          { source: "25", target: "11" },
          { source: "25", target: "23" },
          { source: "25", target: "24" },
          { source: "26", target: "11" },
          { source: "26", target: "16" },
          { source: "26", target: "24" },
          { source: "26", target: "25" },
          { source: "27", target: "11" },
          { source: "27", target: "23" },
          { source: "27", target: "24" },
          { source: "27", target: "25" },
          { source: "27", target: "26" },
          { source: "28", target: "11" },
          { source: "28", target: "27" },
          { source: "29", target: "11" },
          { source: "29", target: "23" },
          { source: "29", target: "27" },
          { source: "30", target: "23" },
          { source: "31", target: "11" },
          { source: "31", target: "23" },
          { source: "31", target: "27" },
          { source: "31", target: "30" },
          { source: "32", target: "11" },
          { source: "33", target: "11" },
          { source: "33", target: "27" },
          { source: "34", target: "11" },
          { source: "34", target: "29" },
          { source: "35", target: "11" },
          { source: "35", target: "29" },
          { source: "35", target: "34" },
          { source: "36", target: "11" },
          { source: "36", target: "29" },
          { source: "36", target: "34" },
          { source: "36", target: "35" },
          { source: "37", target: "11" },
          { source: "37", target: "29" },
          { source: "37", target: "34" },
          { source: "37", target: "35" },
          { source: "37", target: "36" },
          { source: "38", target: "11" },
          { source: "38", target: "29" },
          { source: "38", target: "34" },
          { source: "38", target: "35" },
          { source: "38", target: "36" },
          { source: "38", target: "37" },
          { source: "39", target: "25" },
          { source: "40", target: "25" },
          { source: "41", target: "24" },
          { source: "41", target: "25" },
          { source: "42", target: "24" },
          { source: "42", target: "25" },
          { source: "42", target: "41" },
          { source: "43", target: "11" },
          { source: "43", target: "26" },
          { source: "43", target: "27" },
          { source: "44", target: "11" },
          { source: "44", target: "28" },
          { source: "45", target: "28" },
          { source: "47", target: "46" },
          { source: "48", target: "11" },
          { source: "48", target: "25" },
          { source: "48", target: "27" },
          { source: "48", target: "47" },
          { source: "49", target: "11" },
          { source: "49", target: "26" },
          { source: "50", target: "24" },
          { source: "50", target: "49" },
          { source: "51", target: "11" },
          { source: "51", target: "26" },
          { source: "51", target: "49" },
          { source: "52", target: "39" },
          { source: "52", target: "51" },
          { source: "53", target: "51" },
          { source: "54", target: "26" },
          { source: "54", target: "49" },
          { source: "54", target: "51" },
          { source: "55", target: "11" },
          { source: "55", target: "16" },
          { source: "55", target: "25" },
          { source: "55", target: "26" },
          { source: "55", target: "39" },
          { source: "55", target: "41" },
          { source: "55", target: "48" },
          { source: "55", target: "49" },
          { source: "55", target: "51" },
          { source: "55", target: "54" },
          { source: "56", target: "49" },
          { source: "56", target: "55" },
          { source: "57", target: "41" },
          { source: "57", target: "48" },
          { source: "57", target: "55" },
          { source: "58", target: "11" },
          { source: "58", target: "27" },
          { source: "58", target: "48" },
          { source: "58", target: "55" },
          { source: "58", target: "57" },
          { source: "59", target: "48" },
          { source: "59", target: "55" },
          { source: "59", target: "57" },
          { source: "59", target: "58" },
          { source: "60", target: "48" },
          { source: "60", target: "58" },
          { source: "60", target: "59" },
          { source: "61", target: "48" },
          { source: "61", target: "55" },
          { source: "61", target: "57" },
          { source: "61", target: "58" },
          { source: "61", target: "59" },
          { source: "61", target: "60" },
          { source: "62", target: "41" },
          { source: "62", target: "48" },
          { source: "62", target: "55" },
          { source: "62", target: "57" },
          { source: "62", target: "58" },
          { source: "62", target: "59" },
          { source: "62", target: "60" },
          { source: "62", target: "61" },
          { source: "63", target: "48" },
          { source: "63", target: "55" },
          { source: "63", target: "57" },
          { source: "63", target: "58" },
          { source: "63", target: "59" },
          { source: "63", target: "60" },
          { source: "63", target: "61" },
          { source: "63", target: "62" },
          { source: "64", target: "11" },
          { source: "64", target: "48" },
          { source: "64", target: "55" },
          { source: "64", target: "57" },
          { source: "64", target: "58" },
          { source: "64", target: "59" },
          { source: "64", target: "60" },
          { source: "64", target: "61" },
          { source: "64", target: "62" },
          { source: "64", target: "63" },
          { source: "65", target: "48" },
          { source: "65", target: "55" },
          { source: "65", target: "57" },
          { source: "65", target: "58" },
          { source: "65", target: "59" },
          { source: "65", target: "60" },
          { source: "65", target: "61" },
          { source: "65", target: "62" },
          { source: "65", target: "63" },
          { source: "65", target: "64" },
          { source: "66", target: "48" },
          { source: "66", target: "58" },
          { source: "66", target: "59" },
          { source: "66", target: "60" },
          { source: "66", target: "61" },
          { source: "66", target: "62" },
          { source: "66", target: "63" },
          { source: "66", target: "64" },
          { source: "66", target: "65" },
          { source: "67", target: "57" },
          { source: "68", target: "11" },
          { source: "68", target: "24" },
          { source: "68", target: "25" },
          { source: "68", target: "27" },
          { source: "68", target: "41" },
          { source: "68", target: "48" },
          { source: "69", target: "11" },
          { source: "69", target: "24" },
          { source: "69", target: "25" },
          { source: "69", target: "27" },
          { source: "69", target: "41" },
          { source: "69", target: "48" },
          { source: "69", target: "68" },
          { source: "70", target: "11" },
          { source: "70", target: "24" },
          { source: "70", target: "25" },
          { source: "70", target: "27" },
          { source: "70", target: "41" },
          { source: "70", target: "58" },
          { source: "70", target: "68" },
          { source: "70", target: "69" },
          { source: "71", target: "11" },
          { source: "71", target: "25" },
          { source: "71", target: "27" },
          { source: "71", target: "41" },
          { source: "71", target: "48" },
          { source: "71", target: "68" },
          { source: "71", target: "69" },
          { source: "71", target: "70" },
          { source: "72", target: "11" },
          { source: "72", target: "26" },
          { source: "72", target: "27" },
          { source: "73", target: "48" },
          { source: "74", target: "48" },
          { source: "74", target: "73" },
          { source: "75", target: "25" },
          { source: "75", target: "41" },
          { source: "75", target: "48" },
          { source: "75", target: "68" },
          { source: "75", target: "69" },
          { source: "75", target: "70" },
          { source: "75", target: "71" },
          { source: "76", target: "48" },
          { source: "76", target: "58" },
          { source: "76", target: "62" },
          { source: "76", target: "63" },
          { source: "76", target: "64" },
          { source: "76", target: "65" },
          { source: "76", target: "66" },
        ],
        categories: [
          { name: "A" },
          { name: "B" },
          { name: "C" },
          { name: "D" },
          { name: "E" },
          { name: "F" },
          { name: "G" },
          { name: "H" },
          { name: "I" },
        ],
      },
    };
  },
  created() {},
  mounted() {
    this.init();
  },
  methods: {
    init() {
      this.myEchart = this.$echarts.init(document.querySelector("#chartsBox")); //將echarts綁定到dom元素上
      this.option = {
        //echarts的配置文件
        title: {
          //title組件
          text: "Les Miserables", //顯示的文本
          subtext: "Default layout",
          top: "bottom", //組件在echarts上下的位置
          left: "right", //組件在echarts左右上的位置
        },
        tooltip: {
          //提示框組件當鼠標移入時觸發
          show: true, //是否顯示提示框組件。
          trigger: "item", //觸發類型
 
        },
        legend: [
          //圖例組件
          {
            data: this.graph.categories.map(function (a) {
              //圖例所要分類的種類
              return a.name;
            }),
          },
        ],
        series: [
          //數據展示組件
          {
            name: "Les Miserables", //組件的名稱
            type: "graph", //組件的類行,選擇graph即關系圖
            layout: "force", //graph的瞭類型,此時為力引導
            data: this.graph.nodes, //要展示的數據
            links: this.graph.links, //要展示的關系線
            categories: this.graph.categories, //展示的所有分類
            roam: true, //是否可以縮放
            label: {
              //graph節點的標簽
              position: "right", //標簽所在的位置
              show: false, //是否默認顯示標簽
            },
            force: {
              //力引導的配置
              repulsion: 100, //節點之間的斥力
            },
            scaleLimit: {
              //滾輪縮放的極限控制
              max: 12, //滾輪縮放最大值
              min: 3, //滾輪縮放的最小值
            },
          },
        ],
      };
      this.myEchart.setOption(this.option); //通過echarts的配置文件進行渲染
    },
  },
};
</script>
 
<style  scoped>
#chartsBox {
  width: 100%;
  height: 100vh;
}
</style>

vue中關系圖組件

1.Graph.vue

<template>
  <div class="yh-graph"></div>
</template>
<script>
var _POS = [
  [-1, -0.35],
  [1.0, 0.1],
  [0.72, -0.45],
  [-0.75, 0.25],
  [0.4, -0.75],
  [-0.5, -0.55],
  [0.45, 0.2],
  [-0.15, -0.66]
];
 
var _N_RADIUS = 600;
 
function _position(node, i) {
  if (i == 0) {
    node.x = 0;
    node.y = 0;
  } else {
    i = i - 1;
    var k = i % _POS.length;
    var p = _POS[k];
    var r = _N_RADIUS * (i / _POS.length + 1);
    node.x = p[0] * r;
    node.y = p[1] * r;
  }
}
 
function _create_nodes(nodes) {
  var arr = [];
  var i = 0;
  nodes.forEach(function(e) {
    var n = {};
    n.id = e.id;
    n.name = e.name;
    var s = e.size;
    n.value = s;
    n.symbolSize = s;
    if (e.image) {
      n.symbol = "image://" + e.image;
    }
    _position(n, i++);
    arr.push(n);
  });
  return arr;
}
 
function _create_links(links) {
  var arr = [];
  links.forEach(function(e) {
    var l = {};
    l.id = e.id;
    l.name = e.name;
    l.source = e.source;
    l.target = e.target;
    arr.push(l);
  });
  return arr;
}
 
function showGraph(chart, nodes, links) {
  var option = {
    series: [
      {
        name: "g1",
        type: "graph",
        animation: false,
        data: nodes,
        links: links,
        roam: false,
        focusNodeAdjacency: true,
        itemStyle: {
          normal: {
            color: "#999",
            backgroundColor: "#fff",
            borderColor: "#fff",
            borderWidth: 1,
            shadowBlur: 10,
            shadowColor: "rgba(0, 0, 0, 0.3)"
          }
        },
        label: {
          show: true,
          position: "bottom",
          color: "#000",
          formatter: "{b}"
        },
        force: {
          repulsion: 10000
        },
        lineStyle: {
          type: "solid",
          color: "#666",
          curveness: 0.3,
          opacity: 0.9,
          width: 3
        },
        edgeLabel: {
          show: true,
          formatter: function(params) {
            return params.data["name"];
          },
          color: "#fff",
          borderColor: "#666",
          backgroundColor: "#666",
          borderWidth: 1,
          borderRadius: 3,
          padding: [2, 5, 2, 5]
        },
        emphasis: {
          lineStyle: {
            width: 10
          }
        }
      }
    ]
  };
  chart.setOption(option);
  chart.dispatchAction({
    type: "unfocusNodeAdjacency",
    seriesIndex: 0,
    dataIndex: 0
  });
}
 
export default {
  name: "YhGraph",
  data() {
    return {
      nodes: [],
      links: []
    };
  },
  methods: {
    onLinkClick(link) {
      this.$emit("select-link", {
        id: link.id,
        name: link.name,
        source: this.getNodeDesc(link.source),
        target: this.getNodeDesc(link.target)
      });
    },
    getNodeDesc(id) {
      var nodes = this.nodes;
      for (var i = 0; i < nodes.length; ++i) {
        var n = nodes[i];
        if (n.id == id) {
          return { id: id, name: n.name };
        }
      }
    },
    updateLinkName(id, name) {
      var links = this.links;
      for (var i = 0; i < links.length; ++i) {
        var n = links[i];
        if (n.id == id) {
          n.name = name;
          var chart = this.$chart;
          chart.clear();
          showGraph(chart, this.nodes, this.links);
        }
      }
    },
    show(g) {
      this.nodes = _create_nodes(g.nodes);
      this.links = _create_links(g.links);
      showGraph(this.$chart, this.nodes, this.links);
    }
  },
  mounted() {
    var chart = echarts.init(this.$el);
    var vm = this;
    chart.on("click", function(params) {
      if (params.seriesIndex == 0 && params.dataType == "edge") {
        vm.onLinkClick(params.data);
      }
    });
    this.$chart = chart;
  }
};
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

2.GraphDemo.vue

<template>
  <div class="yh-page">
    <h1>關系圖演示</h1>
    <div class="desc">
      Demo源代碼:
    </div>
    <div class="yh-block" style="align:top">
      <yh-graph
        ref="graph"
        style="width:500px;height:400px;display:inline-block"
        @select-link="onLinkSelect"
      ></yh-graph>
      <div class="rel-form">
        <el-form v-show="editing" :model="rel" label-width="50px" class="yh-small">
          <div style="padding-left:50px">{{rel.source}} 與 {{rel.target}}</div>
          <el-form-item label="關系">
            <el-input v-model="rel.name" size="small"></el-input>
          </el-form-item>
          <yh-button class="yh-primary" @click="onSaveClick">確定</yh-button>
        </el-form>
      </div>
    </div>
  </div>
</template>
<script>
import graph from "../../components/comcompont/echarts/Graph";
import yhbutton from "../../components/comcompont/Button";
export default {
  name: "GraphDemo",
  data() {
    return {
      rel: {
        id: "",
        source: "",
        target: "",
        oldName: "",
        name: ""
      },
      editing: false,
      graph: {
        nodes: [
          { id: "0", name: "客戶1", size: 100, image: "/images/ic_head.png" },
          { id: "1", name: "A", size: 70 },
          { id: "2", name: "B", size: 70 },
          { id: "3", name: "C", size: 70 },
          { id: "4", name: "D", size: 70 },
          { id: "5", name: "E", size: 70 },
          { id: "6", name: "F", size: 70 },
          { id: "7", name: "G", size: 70 },
          { id: "8", name: "H", size: 70 }
        ],
        links: [
          { id: "0", name: "夫妻", source: "0", target: "1" },
          { id: "1", name: "父子", source: "0", target: "2" },
          { id: "2", name: "母子", source: "0", target: "3" },
          { id: "3", name: "父子", source: "0", target: "4" },
          { id: "4", name: "同事", source: "0", target: "5" },
          { id: "5", name: "同事", source: "0", target: "6" },
          { id: "6", name: "同事", source: "0", target: "7" },
          { id: "7", name: "同事", source: "0", target: "8" }
        ]
      }
    };
  },
  methods: {
    onLinkSelect(link) {
      var r = this.rel;
      r.id = link.id;
      r.name = link.name;
      r.oldName = link.name;
      r.source = link.source.name;
      r.target = link.target.name;
      this.editing = true;
    },
    onSaveClick() {
      var rel = this.rel;
      if (rel.oldName != rel.name) {
        this.$refs.graph.updateLinkName(rel.id, rel.name);
      }
      this.editing = false;
    }
  },
  mounted() {
    this.$refs.graph.show(this.graph);
  },
  components: {
    "yh-graph": graph,
    "yh-button": yhbutton
  }
};
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scope>
.rel-form {
  width: 300px;
  height: 400px;
  display: inline-block;
  float: right;
  margin-right: 20px;
  margin-top: 20px;
}
</style>

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: