vue2 d3实现企查查股权穿透图股权结构图效果详解

yizhihongxing

标题:Vue2 + D3 实现企查查股权穿透图股权结构图效果详解

在本文中,我们将介绍如何通过 Vue2 和 D3 库实现企查查股权穿透图股权结构图效果。下面将分为以下几个步骤进行讲解:

  1. 搭建项目环境
  2. 导入 D3 库
  3. 通过 D3 解析数据
  4. 绘制股权穿透图
  5. 美化股权穿透图

搭建项目环境

  • 使用 VueCli 创建一个新项目
  • 安装 ElementUI:npm install element-ui -S
  • 安装 D3:npm install d3

导入 D3 库

在 Vue 组件中,可通过如下代码引入 D3 库:

import * as d3 from "d3";

通过 D3 解析数据

在绘制股权穿透图前,需要通过 D3 将原始股权数据转化为可供绘图使用的 JSON 数据。通常,股权数据的格式为树形结构,例如:

{
  "id": "A1",
  "name": "公司A1",
  "children": [
    {
      "id": "B1",
      "name": "公司B1",
      "children": [
        {
          "id": "C1",
          "name": "公司C1",
          "children": []
        }
      ]
    },
    {
      "id": "B2",
      "name": "公司B2",
      "children": []
    }
  ]
}

通过 D3 库中提供的 tree() 方法,可将以上格式的数据转化为 D3 树形结构,方便后面使用。示例代码如下:

// 创建 D3 树形布局对象
var tree = d3.tree();

// 加载原始股权数据
var orgData = {
  "id": "A1",
  "name": "公司A1",
  "children": [
    {
      "id": "B1",
      "name": "公司B1",
      "children": [
        {
          "id": "C1",
          "name": "公司C1",
          "children": []
        },
        {
          "id": "C2",
          "name": "公司C2",
          "children": []
        }
      ]
    },
    {
      "id": "B2",
      "name": "公司B2",
      "children": []
    }
  ]
};

// 将原始数据转化为 D3 树形结构
var treeData = d3.hierarchy(orgData);
tree(treeData);

绘制股权穿透图

在导入 D3 库后,我们可以通过 D3 提供的绘图 API,快速绘制出股权穿透图。以下为示例代码:

// 绘制股权穿透图
var svg = d3.select("svg");
var g = svg.append("g")
  .attr("transform", "translate(50,50)");

// 绘制节点
var nodes = g.selectAll(".node")
  .data(treeData.descendants())
  .enter()
  .append("g")
  .attr("class", function(d) {
    return "node" + (d.children ? " node--internal" : " node--leaf");
  })
  .attr("transform", function(d) {
    return "translate(" + d.x + "," + d.y + ")";
  });

// 绘制节点文本
nodes.append("text")
  .attr("dy", "0.3em")
  .attr("x", function(d) {
    return d.children ? -8 : 8;
  })
  .style("text-anchor", function(d) {
    return d.children ? "end" : "start";
  })
  .text(function(d) {
    return d.data.name;
  });

// 绘制连接线
g.selectAll(".link")
  .data(treeData.descendants().slice(1))
  .enter()
  .append("path")
  .attr("class", "link")
  .attr("d", function(d) {
    return "M" + d.x + "," + d.y
        + "C" + (d.x + d.parent.x) / 2 + "," + d.y
        + " " + (d.x + d.parent.x) / 2 + "," + d.parent.y
        + " " + d.parent.x + "," + d.parent.y;
  });

美化股权穿透图

以上代码绘制出的股权穿透图效果较为简陋。下面将通过修改节点和连接线样式,使股权穿透图更美观。以下为示例代码:

// 设置样式
var linkWidth = 2; // 连接线宽度
var linkColor = "#ccc"; // 连接线颜色
var nodeRadius = 20; // 节点半径
var nodeStrokeWidth = 2; // 节点描边宽度
var nodeColor = "#fff"; // 节点颜色
var nodeStrokeColor = "steelblue"; // 节点描边颜色

// 绘制节点
var nodes = g.selectAll(".node")
  .data(treeData.descendants())
  .enter()
  .append("g")
  .attr("class", function(d) {
    return "node" + (d.children ? " node--internal" : " node--leaf");
  })
  .attr("transform", function(d) {
    return "translate(" + d.x + "," + d.y + ")";
  });

nodes.append("circle")
  .attr("r", nodeRadius)
  .attr("stroke", nodeStrokeColor)
  .attr("stroke-width", nodeStrokeWidth)
  .attr("fill", nodeColor);

// 绘制节点文本
nodes.append("text")
  .attr("dy", "0.3em")
  .attr("x", function(d) {
    return d.children ? -8 : 8;
  })
  .style("text-anchor", function(d) {
    return d.children ? "end" : "start";
  })
  .text(function(d) {
    return d.data.name;
  });

// 绘制连接线
g.selectAll(".link")
  .data(treeData.descendants().slice(1))
  .enter()
  .append("path")
  .attr("class", "link")
  .attr("stroke", linkColor)
  .attr("stroke-width", linkWidth)
  .attr("fill", "none")
  .attr("d", function(d) {
    return "M" + d.x + "," + d.y
        + "C" + (d.x + d.parent.x) / 2 + "," + d.y
        + " " + (d.x + d.parent.x) / 2 + "," + d.parent.y
        + " " + d.parent.x + "," + d.parent.y;
  });

以上代码将连线改为实线,节点半径增大并添加描边效果,使股权穿透图更美观。

以上为实现股权穿透图的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue2 d3实现企查查股权穿透图股权结构图效果详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue项目中接口调用的详细讲解

    下面是“Vue项目中接口调用的详细讲解”的完整攻略。 Vue项目中接口调用的详细讲解 在Vue项目中使用接口调用是一个非常常见的需求。下面将详细讲解如何在Vue项目中进行接口调用。 1、安装axios 在Vue中使用axios进行接口调用需要先安装axios,可以通过npm安装。在终端中输入以下命令: npm install axios –save 安装完…

    Vue 2023年5月28日
    00
  • vue学习教程之带你一步步详细解析vue-cli

    Vue学习教程之带你一步步详细解析vue-cli 前言 Vue.js是一个轻量级的JavaScript框架,它与React和Angular一起组成了前端三大框架。Vue.js由开发者Evan You创建,它的双向数据绑定和组件化思想极大地提高了前端开发的效率。 随着Vue.js的发展,它的生态系统也日益完善。vue-cli是Vue.js的脚手架工具,它可以帮…

    Vue 2023年5月27日
    00
  • vue.js基于ElementUI封装了CRUD的弹框组件

    让我来给你详细讲解一下vue.js基于ElementUI封装了CRUD的弹框组件的完整攻略。 简介 CRUD是指增加(Create)、读取(Read)、更新(Update)和删除(Delete),是Web应用程序中最常见的操作,几乎每个网站都会用到。因此,为了提高开发效率,很多框架都提供了CRUD的封装组件,vue.js也不例外。本文主要介绍vue.js基于…

    Vue 2023年5月28日
    00
  • Sublime Text新建.vue模板并高亮(图文教程)

    下面我将为你详细讲解“Sublime Text新建.vue模板并高亮(图文教程)”的攻略: Sublime Text新建.vue模板并高亮(图文教程) 1. 下载Vue Syntax Highlight插件 首先,在Sublime Text中安装Vue Syntax Highlight插件。可以选择在菜单栏中选择“Preferences” -> “Pa…

    Vue 2023年5月28日
    00
  • vue3+vite+ts使用monaco-editor编辑器的简单步骤

    使用vue3+vite+ts并集成monaco-editor编辑器需要经过以下步骤: 步骤一:创建vue3项目 使用vue-cli可以创建一个基础的vue3项目,安装vue-cli: npm install -g @vue/cli 然后执行以下命令创建vue3项目: vue create my-app –preset vite/vue 其中my-app是项…

    Vue 2023年5月28日
    00
  • 在vue中使用express-mock搭建mock服务的方法

    下面我将为您详细讲解在vue中使用express-mock搭建mock服务的方法。 1. 什么是express-mock express-mock是基于Express框架的模拟数据生成器,可以用来模拟API返回数据,支持对于RESTful API的请求方式,非常方便快捷。 2. 安装express-mock 在使用express-mock之前需要安装Node…

    Vue 2023年5月28日
    00
  • vue vant中picker组件的使用

    针对“vue vant中picker组件的使用”的完整攻略,我将分为以下几个部分进行讲解: picker组件的基本使用 picker组件的高级使用 两条示例说明 1. picker组件的基本使用 在vue vant中使用picker组件首先需要通过npm安装vant组件库: npm install vant -S 然后在需要使用picker组件的页面中导入v…

    Vue 2023年5月27日
    00
  • vue使用技巧及vue项目中遇到的问题

    Vue使用技巧及Vue项目中遇到的问题攻略 一、技巧篇 1. 路由懒加载 路由懒加载可以大幅提高页面加载速度,特别是对于单页面应用程序。可以将异步组件绑定到动态导航。在用户需要更新或者运行应用程序时,将会调度这个组件。项目越大,使用路由懒加载越有必要。 假设我们有如下代码: import Home from ‘../views/Home.vue’ impor…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部