Vue에서 데이터 시각화 관계 다이어그램(예: 관계 다이어그램)을 표시하는 방법

Vue에서 데이터 시각화 관계 다이어그램(예: 관계 다이어그램)을 표시하는 방법

데이터 분석 및 시각화 기술의 발전으로 점점 더 많은 응용 프로그램에서 관계형 그래프를 사용하여 데이터 간의 관계를 보여주기 시작했습니다. Vue에서는 타사 라이브러리 Vis.js를 사용하여 관계 그래프 표시를 실현하고 Vue 구성 요소를 통해 데이터 바인딩 및 상호 작용을 수행할 수 있습니다. 이 기사에서는 Vue에서 Vis.js를 사용하여 관계 그래프를 만들고 데이터 바인딩 및 상호 작용 기능을 구현하는 방법을 소개합니다.

여기에 이미지 설명 삽입

Vis.js 소개

Vis.js는 대화형 데이터 시각화를 만들기 위한 JavaScript 라이브러리입니다. 개발자가 관계형 그래프, 타임라인, 맵 등 다양한 유형의 다이어그램을 쉽게 생성할 수 있는 일련의 도구 및 API를 제공합니다. Vis.js는 또한 그래픽 인터페이스를 제공하여 개발자가 직관적으로 다이어그램을 작성할 수 있도록 합니다.

Vue에서 Vis.js를 사용하여 Vue 구성 요소를 통해 관계 그래프를 만들고 Vue 애플리케이션에 포함할 수 있습니다.

Vis.js 설치

Vue에서 Vis.js를 사용하려면 먼저 Vis.js 라이브러리를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

npm install vis --save

Vue 컴포넌트 생성

다음은 관계 그래프를 생성하기 위한 간단한 Vue 구성 요소입니다.

<template>
  <div ref="container"></div>
</template>

<script>
import {
      
       DataSet, Network } from 'vis'

export default {
      
      
  props: {
      
      
    nodes: {
      
      
      type: Array,
      required: true,
    },
    edges: {
      
      
      type: Array,
      required: true,
    },
  },
  data() {
      
      
    return {
      
      
      network: null,
    }
  },
  mounted() {
      
      
    this.init()
  },
  methods: {
      
      
    init() {
      
      
      // 创建数据集
      const nodesDataSet = new DataSet(this.nodes)
      const edgesDataSet = new DataSet(this.edges)

      // 创建关系图谱
      const container = this.$refs.container
      const data = {
      
       nodes: nodesDataSet, edges: edgesDataSet }
      const options = {
      
      }
      this.network = new Network(container, data, options)
    },
  },
  watch: {
      
      
    nodes() {
      
      
      this.network.setData({
      
       nodes: this.nodes, edges: this.edges })
    },
    edges() {
      
      
      this.network.setData({
      
       nodes: this.nodes, edges: this.edges })
    },
  },
}
</script>

위의 코드에서 먼저 Vis.js 라이브러리를 도입하고 Vue 구성 요소를 정의했습니다. props에서 관계 그래프의 노드 및 에지 데이터를 수신하는 데 사용되는 노드 및 에지라는 두 개의 배열 매개변수를 정의합니다. 마운트된 후크 함수에서 init 메서드를 호출하여 관계 그래프를 만듭니다. init 메소드에서 데이터 세트를 생성한 다음 Network 클래스를 사용하여 관계 그래프를 생성합니다. 마지막으로 데이터 바인딩을 실현하기 위해 watch를 사용하여 노드 및 에지 매개변수의 변경 사항을 모니터링합니다.

관계 그래프 사용

다음은 위의 Vue 구성 요소를 사용하여 관계 그래프를 표시하는 방법을 보여주는 간단한 예입니다.

<template>
  <div>
    <div>
      <label>节点数:</label>
      <input v-model="nodeCount" type="number" min="1" max="100" step="1" @change="generateData" />
    </div>
    <div>
      <label>边数:</label>
      <input v-model="edgeCount" type="number" min="1" max="100" step="1" @change="generateData" />
    </div>
    <div>
      <relation-graph :nodes="nodes" :edges="edges" />
    </div>
  </div>
</template>

<script>
import RelationGraph from '@/components/RelationGraph.vue'

export default {
      
      
  components: {
      
      
    RelationGraph,
  },
  data() {
      
      
    return {
      
      
      nodeCount: 10,
      edgeCount: 15,
      nodes: [],
      edges: [],
    }
  },
  mounted() {
      
      
    this.generateData()
  },
  methods: {
      
      
    generateData() {
      
      
      // 生成节点数据
      this.nodes = []
      for (let i = 1; i <= this.nodeCount; i++) {
      
      
        this.nodes.push({
      
       id: i, label: `Node ${ 
        i}` })
      }

      // 生成边数据
      const maxEdgeCount = (this.nodeCount * (this.nodeCount - 1)) / 2
      const edgeCount = Math.min(this.edgeCount, maxEdgeCount)
      const edges = new Set()
      while (edges.size < edgeCount) {
      
      
        const source = Math.floor(Math.random() * this.nodeCount) + 1
        const target = Math.floor(Math.random() * this.nodeCount) + 1
        if (source !== target) {
      
      
          edges.add(`${ 
        Math.min(source, target)}-${ 
        Math.max(source, target)}`)
        }
      }
      this.edges = Array.from(edges).map((edge) => {
      
      
        const [source, target] = edge.split('-')
        return {
      
       from: source, to: target }
      })
    },
  },
}
</script>

위의 코드에서는 먼저 이전에 정의한 관계형 그래프 구성 요소인 RelationGraph를 도입한 다음 템플릿에 입력 상자를 정의하여 생성된 노드 및 가장자리 수를 제어했습니다. 마지막으로 RelationGraph 구성 요소를 사용하여 관계 그래프를 표시하고 소품을 통해 노드 및 에지 데이터를 전달합니다.

마운트된 후크 함수에서 우리는 노드 및 에지 데이터를 생성하기 위해 generateData 메서드를 호출합니다. generateData 메서드에서 Math.random 함수를 사용하여 임의의 노드와 가장자리를 생성한 다음 노드 및 가장자리 매개 변수에 할당합니다.

대화형 기능 구현

Vis.js에서는 이벤트를 통해 대화형 기능을 구현할 수 있습니다. 예를 들어 클릭 이벤트를 수신하여 노드의 클릭 작업을 실현할 수 있습니다. 다음은 노드 클릭 시 노드 정보 팝업 기능을 구현한 예입니다.

<template>
  <div>
    <div>
      <label>节点数:</label>
      <input v-model="nodeCount" type="number" min="1" max="100" step="1" @change="generateData" />
    </div>
    <div>
      <label>边数:</label>
      <input v-model="edgeCount" type="number" min="1" max="100" step="1" @change="generateData" />
    </div>
    <div>
      <relation-graph :nodes="nodes" :edges="edges" @clickNode="handleClickNode" />
    </div>
  </div>
</template>

<script>
import RelationGraph from '@/components/RelationGraph.vue'

export default {
      
      
  components: {
      
      
    RelationGraph,
  },
  data() {
      
      
    return {
      
      
      nodeCount: 10,
      edgeCount: 15,
      nodes: [],
      edges: [],
    }
  },
  mounted() {
      
      
    this.generateData()
  },
  methods: {
      
      
    generateData() {
      
      
      // 生成节点数据
      this.nodes = []
      for (let i = 1; i <= this.nodeCount; i++) {
      
      
        this.nodes.push({
      
       id: i, label: `Node ${ 
        i}` })
      }

      // 生成边数据
      const maxEdgeCount = (this.nodeCount * (this.nodeCount - 1)) / 2
      const edgeCount = Math.min(this.edgeCount, maxEdgeCount)
      const edges = new Set()
      while (edges.size < edgeCount) {
      
      
        const source = Math.floor(Math.random() * this.nodeCount) + 1
        const target = Math.floor(Math.random() * this.nodeCount) + 1
        if (source !== target) {
      
      
          edges.add(`${ 
        Math.min(source, target)}-${ 
        Math.max(source, target)}`)
        }
      }
      this.edges = Array.from(edges).map((edge) => {
      
      
        const [source, target] = edge.split('-')
        return {
      
       from: source, to: target }
      })
    },
    handleClickNode(event) {
      
      
      alert(`你点击了节点:${ 
        event.nodes[0]}`)
    },
  },
}
</script>

위 코드에서 RelationGraph 구성 요소에 @clickNode 이벤트 리스너를 추가하고 handleClickNode 메서드를 정의했습니다. handleClickNode 메서드에서 경고 기능을 사용하여 노드 정보를 팝업합니다.

요약하다

이 기사에서는 Vue에서 Vis.js를 사용하여 관계 그래프를 만들고 데이터 바인딩 및 상호 작용 기능을 구현하는 방법을 소개합니다. 이 기사의 소개를 통해 Vue 프로젝트에서 Vis.js 라이브러리를 사용하여 관계 그래프를 표시하고 데이터 바인딩 및 상호 작용 기능을 구현하는 방법을 배울 수 있습니다. 이 기사가 도움이 되길 바랍니다.

рекомендация

отblog.csdn.net/it_xushixiong/article/details/131241605