vue2关系图Relation Graph

https://relation-graph.com/#/index

Relation Graph 介绍

Relation Graph 是一种用于表示实体间关系的图形模型,它将复杂的实体关系可视化,使得人们能够更直观地理解实体之间的联系。在数据科学、数据库设计、人工智能、社会网络分析等多个领域有着广泛的应用。Relation Graph 可以表示一对多、多对一、多对多等各种关系,它通过节点(代表实体)和边(代表关系)来构建图形结构。

优点

1. 可视化表达:Relation Graph 通过图形的方式直观地展示了数据之间的复杂关系,使信息更容易被理解和记忆。

2. 模式识别:通过图形结构,可以更容易地发现数据中的模式、趋势和异常,有助于数据分析和决策制定。

3. 易于扩展:随着数据的增加或变化,只需添加新的节点或修改已有边即可更新图形,保持数据的实时性和准确性。

4. 促进沟通:图形化的展示方式便于团队成员间的交流和讨论,尤其是在跨部门协作时。

5. 灵活分析:支持多种分析方法,如路径分析、聚类分析、中心度分析等,满足不同场景下的需求。

缺点

1. 复杂度管理:当实体和关系数量庞大时,图形可能变得非常复杂,难以阅读和理解。此时,可能需要采用层级结构、过滤器或其他辅助手段来简化视图。

2. 数据更新挑战:维护大量动态连接的数据可能会带来性能和更新挑战,尤其是在实时数据流的场景下。

3. 视觉误导:虽然图形化展示直观,但过度依赖图形可能导致对复杂关系的误解。正确的解读往往需要深入的专业知识和分析技能。

4. 技术要求:构建和维护 Relation Graph 需要一定的技术能力,包括数据建模、图形界面设计和交互设计等方面的知识。

5. 隐私和安全问题:在涉及个人隐私或敏感数据的应用中,图形化的展示方式可能带来额外的隐私和安全风险。

总的来说,Relation Graph 是一种强大的工具,特别是在处理复杂、关联性强的数据时,但在应用时也需要考虑到其固有的限制和挑战。

示例

//下载npm install --save relation-graph


npm install --save relation-graph

在main.js引入,就不用局部引入

import RelationGraph from 'relation-graph';


Vue.use(RelationGraph);

随意创建的vue文件

<template>
  <div style="">
    <!-- 这个示例中,调用setJsonData时传递的是一个典型的有层级结构的数据,图谱会自动识别(通过children属性识别子节点),再将其做扁平化处理。这样做仅仅是为了方便展示一些树状图谱。 -->
    <!-- 直接使用tree数据结构有明显的确缺陷:只能设置全局的线条默认样式,无法对具体的link设置属性,不能精细化的定义线条的样式。 -->
    <div
      v-loading="g_loading"
      style="width: calc(100% - 10px);height:calc(100vh - 140px);border-top: #efefef solid 1px;"
    >
      <RelationGraph
        ref="seeksRelationGraph"
        :options="graphOptions"
      />
    </div>
    <el-button
      type="success"
      class="c-show-code-button"
    >
      <el-link
        href="https://github.com/seeksdream/relation-graph/blob/master/examples/views/seeks-graph-docs/demo/Demo4TreeData.vue"
        target="_blank"
        style="color: #ffffff;"
      >
        查看代码
      </el-link>
    </el-button>
  </div>
</template>

<script>
// 如果您没有在main.js文件中使用Vue.use(RelationGraph); 就需要使用下面这一行代码来引入relation-graph
// import RelationGraph from 'relation-graph';

export default {
  name: 'SeeksRelationGraphDemo',
  components: { },
  data() {
    return {
      g_loading: true,
      demoname: '---',
      graphOptions: {
        debug: true,
        'backgrounImage': 'https://camo.githubusercontent.com/ede1654f055903cdc39044129d15d5b158f4f3b33ba5b7c21c7407792a506dea/687474703a2f2f72656c6174696f6e2d67726170682e636f6d2f776562736974652f6c6f676f',
        'backgrounImageNoRepeat': true,
        'layouts': [
          {
            'label': '中心',
            'layoutName': 'tree',
            'layoutClassName': 'seeks-layout-center',
            'defaultJunctionPoint': 'border',
            'defaultNodeShape': 0,
            'defaultLineShape': 1,
            'from': 'left',
            // 通过这4个属性来调整 tree-层级距离&节点距离
            'min_per_width': '200',
            'max_per_width': '500',
            'min_per_height': '40',
            'max_per_height': '60',
            'levelDistance': '' // 如果此选项有值,则优先级高于上面那4个选项
          }
        ],
        'defaultExpandHolderPosition': 'right',
        'defaultNodeShape': 1,
        'defaultNodeWidth': '100',
        'defaultLineShape': 4,
        'defaultJunctionPoint': 'lr',
        'defaultNodeBorderWidth': 0,
        'defaultLineColor': 'rgba(0, 186, 189, 1)',
        'defaultNodeColor': 'rgba(0, 206, 209, 1)'
      }
    };
  },
  created() {
  },
  mounted() {
    this.demoname = this.$route.params.demoname;
    this.setGraphData();
  },
  methods: {
    setGraphData() {
      // 使用要点:通过节点属性expandHolderPosition: 'right' 和 expanded: false 可以让节点在没有子节点的情况下展示一个"展开"按钮
      //         通过onNodeExpand事件监听节点,在被展开的时候有选择的去从后台获取数据,如果已经从后台加载过数据,则让当前图谱根据当前的节点重新布局
      const __graph_json_data = {
        'rootId': 'a',
        'nodes': [
          {
            'id': 'a', 'text': 'a', 'children': [
              {
                'id': 'b', 'text': 'b', 'children': [
                  {
                    'id': 'b1', 'text': 'b1', 'children': [
                      { 'id': 'b1-1', 'text': 'b1-1' },
                      { 'id': 'b1-2', 'text': 'b1-2' },
                      { 'id': 'b1-3', 'text': 'b1-3' },
                      { 'id': 'b1-4', 'text': 'b1-4' },
                      { 'id': 'b1-5', 'text': 'b1-5' },
                      { 'id': 'b1-6', 'text': 'b1-6' }
                    ]
                  },
                  {
                    'id': 'b2', 'text': 'b2', 'children': [
                      { 'id': 'b2-1', 'text': 'b2-1' },
                      { 'id': 'b2-2', 'text': 'b2-2' }
                    ]
                  }
                ]
              },
              {
                'id': 'c', 'text': 'c', 'children': [
                  { 'id': 'c1', 'text': 'c1' },
                  { 'id': 'c2', 'text': 'c2' },
                  { 'id': 'c3', 'text': 'c3' }
                ]
              }
            ]
          }
        ],
        'lines': [
          // 你仍然可以通过常规方式添加关系
        ]
      };
      console.log(JSON.stringify(__graph_json_data));
      this.g_loading = false;
      this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (graphInstance) => {
        // 这些写上当图谱初始化完成后需要执行的代码
      });
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

示例图

### 在 Vue2 中集成 Relation Graph 实现股权穿透图 为了在 Vue2 项目中成功引入并使用 `Relation Graph` 来创建股权穿透图表,需遵循特定的配置流程[^1]。 #### 安装依赖库 首先,在命令行工具里执行 npm 命令安装所需包: ```bash npm install relation-graph --save ``` #### 创建组件文件结构 建议新建一个名为 `EquityPenetrationChart.vue` 的单文件组件用于封装图形逻辑。此操作有助于保持项目的模块化和可维护性。 #### 编写模板部分 定义 HTML 结构作为容器来承载最终渲染出来的关系网络视图。通过设置宽高属性确保画布尺寸适合页面布局需求。 ```html <template> <div id="equity-penetration-chart" style="width:80%;height:600px;"></div> </template> ``` #### 初始化 JavaScript 部分 利用 mounted 生命周期钩子函数初始化插件实例,并传入自定义的数据源以及样式选项参数完成个性化定制。 ```javascript <script> import * as RG from 'relation-graph' export default { name: 'EquityPenetrationChart', data() { return { configData: { // 自定义数据集 nodes:[ {"id":"node_1","text":"公司A"}, {"id":"node_2","text":"股东B"} ], edges:[ {"fromNodeId":"node_1", "toNodeId":"node_2", "text":"持有比例X%"} ] } }; }, methods:{ initGraph(){ const container = document.getElementById('equity-penetration-chart'); new RG.RelationGraph(container, this.configData); } }, mounted(){ this.initGraph(); } }; </script> ``` 上述代码片段展示了如何基于给定的企业间持股信息构建基本的关系网状图表示形式。开发者可以根据实际业务场景调整节点与边的具体内容及其关联方式。 #### 添加 CSS 样式优化显示效果 适当加入一些额外的样式规则可以改善视觉呈现质量,使整个图表更加美观易读。 ```css <style scoped> #equity-penetration-chart{ margin:auto; border:solid 1px #ccc; } </style> ``` 这样就完成了在一个标准 Vue2 应用程序内嵌入 `Relation Graph` 组件的过程,实现了直观展示企业间的复杂股权投资关系的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值