在vue中使用eacharts創(chuàng)建graph關(guān)系圖方式
使用eacharts創(chuàng)建graph關(guān)系圖
在最近的工作中遇到了這個問題一開始遇到遇到問題且網(wǎng)上現(xiàn)在的教程不那么詳細于是想著自己寫一個來記錄一下。
首先想使用echarts先下載echarts包命令如下
npm install echarts --save
然后將eacharts引入到項目中,推薦在main.js引入。
import * as echarts from 'echarts';
引入完畢后將echarts掛載在原型上(僅限vue2使用)
Vue.prototype.$echarts = echarts//將echarts掛載到vue的原型上
然后再所需要的組件里創(chuàng)建一個容器
<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: {
? ? ? ? ? //提示框組件當(dāng)鼠標移入時觸發(fā)
? ? ? ? ? show: true, //是否顯示提示框組件。
? ? ? ? ? trigger: "item", //觸發(fā)類型
?
? ? ? ? },
? ? ? ? legend: [
? ? ? ? ? //圖例組件
? ? ? ? ? {
? ? ? ? ? ? data: this.graph.categories.map(function (a) {
? ? ? ? ? ? ? //圖例所要分類的種類
? ? ? ? ? ? ? return a.name;
? ? ? ? ? ? }),
? ? ? ? ? },
? ? ? ? ],
? ? ? ? series: [
? ? ? ? ? //數(shù)據(jù)展示組件
? ? ? ? ? {
? ? ? ? ? ? name: "Les Miserables", //組件的名稱
? ? ? ? ? ? type: "graph", //組件的類行,選擇graph即關(guān)系圖
? ? ? ? ? ? layout: "force", //graph的了類型,此時為力引導(dǎo)
? ? ? ? ? ? data: this.graph.nodes, //要展示的數(shù)據(jù)
? ? ? ? ? ? links: this.graph.links, //要展示的關(guān)系線
? ? ? ? ? ? categories: this.graph.categories, //展示的所有分類
? ? ? ? ? ? roam: true, //是否可以縮放
? ? ? ? ? ? label: {
? ? ? ? ? ? ? //graph節(jié)點的標簽
? ? ? ? ? ? ? position: "right", //標簽所在的位置
? ? ? ? ? ? ? show: false, //是否默認顯示標簽
? ? ? ? ? ? },
? ? ? ? ? ? force: {
? ? ? ? ? ? ? //力引導(dǎo)的配置
? ? ? ? ? ? ? repulsion: 100, //節(jié)點之間的斥力
? ? ? ? ? ? },
? ? ? ? ? ? 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: {
//提示框組件當(dāng)鼠標移入時觸發(fā)
show: true, //是否顯示提示框組件。
trigger: "item", //觸發(fā)類型
},
legend: [
//圖例組件
{
data: this.graph.categories.map(function (a) {
//圖例所要分類的種類
return a.name;
}),
},
],
series: [
//數(shù)據(jù)展示組件
{
name: "Les Miserables", //組件的名稱
type: "graph", //組件的類行,選擇graph即關(guān)系圖
layout: "force", //graph的了類型,此時為力引導(dǎo)
data: this.graph.nodes, //要展示的數(shù)據(jù)
links: this.graph.links, //要展示的關(guān)系線
categories: this.graph.categories, //展示的所有分類
roam: true, //是否可以縮放
label: {
//graph節(jié)點的標簽
position: "right", //標簽所在的位置
show: false, //是否默認顯示標簽
},
force: {
//力引導(dǎo)的配置
repulsion: 100, //節(jié)點之間的斥力
},
scaleLimit: {
//滾輪縮放的極限控制
max: 12, //滾輪縮放最大值
min: 3, //滾輪縮放的最小值
},
},
],
};
this.myEchart.setOption(this.option); //通過echarts的配置文件進行渲染
},
},
};
</script>
<style scoped>
#chartsBox {
width: 100%;
height: 100vh;
}
</style>vue中關(guān)系圖組件
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: ""
? ? ? ? },
? ? ? ? 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>關(guān)系圖演示</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="關(guān)系">
? ? ? ? ? ? <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>以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2模擬vue-element-admin手寫角色權(quán)限的實現(xiàn)
本文主要介紹了vue2模擬vue-element-admin手寫角色權(quán)限的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Vue3表單組件el-form校驗規(guī)則rules屬性示例詳解
在el-form中正確使用rules校驗是非常重要的,rules使用不當(dāng)容易出現(xiàn)規(guī)則不生效、規(guī)則一直被觸發(fā)等各種現(xiàn)象,這篇文章主要給大家介紹了關(guān)于Vue3表單組件el-form校驗規(guī)則rules屬性的相關(guān)資料,需要的朋友可以參考下2024-08-08
基于Vue2-Calendar改進的日歷組件(含中文使用說明)
這篇文章主要介紹了基于Vue2-Calendar改進的日歷組件(含中文使用說明)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-04-04
Vue中nprogress頁面加載進度條的方法實現(xiàn)
這篇文章主要介紹了Vue中nprogress頁面加載進度條的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
vue.js element-ui tree樹形控件改iview的方法
這篇文章主要介紹了vue.js element-ui tree樹形控件改iview的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Vue3結(jié)合TypeScript項目開發(fā)實踐總結(jié)
本文主要介紹了Vue3結(jié)合TypeScript項目開發(fā)實踐總結(jié),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

