当前位置:首页 > VUE

vue实现charts树形

2026-03-08 21:59:42VUE

Vue 实现树形图表

在 Vue 中实现树形图表可以使用第三方库如 echartsd3.js。以下是使用 echartsd3.js 的两种方法。

使用 ECharts 实现树形图

安装 ECharts 依赖:

vue实现charts树形

npm install echarts --save

在 Vue 组件中引入并使用:

vue实现charts树形

<template>
  <div ref="treeChart" style="width: 600px; height: 400px;"></div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  mounted() {
    this.initTreeChart();
  },
  methods: {
    initTreeChart() {
      const chart = echarts.init(this.$refs.treeChart);
      const option = {
        series: [{
          type: 'tree',
          data: [{
            name: 'Root',
            children: [
              { name: 'Child 1' },
              { name: 'Child 2', children: [{ name: 'Grandchild' }] }
            ]
          }],
          orient: 'vertical',
          symbol: 'circle',
          symbolSize: 10,
          label: {
            position: 'top',
            rotate: 0,
            verticalAlign: 'middle',
            align: 'right'
          },
          leaves: {
            label: {
              position: 'right',
              verticalAlign: 'middle',
              align: 'left'
            }
          },
          expandAndCollapse: true,
          animationDuration: 550,
          animationDurationUpdate: 750
        }]
      };
      chart.setOption(option);
    }
  }
};
</script>

使用 D3.js 实现树形图

安装 D3.js 依赖:

npm install d3 --save

在 Vue 组件中引入并使用:

<template>
  <svg ref="treeSvg" width="600" height="400"></svg>
</template>

<script>
import * as d3 from 'd3';

export default {
  mounted() {
    this.initD3Tree();
  },
  methods: {
    initD3Tree() {
      const data = {
        name: 'Root',
        children: [
          { name: 'Child 1' },
          { name: 'Child 2', children: [{ name: 'Grandchild' }] }
        ]
      };

      const svg = d3.select(this.$refs.treeSvg);
      const margin = { top: 20, right: 90, bottom: 30, left: 90 };
      const width = 600 - margin.left - margin.right;
      const height = 400 - margin.top - margin.bottom;

      const treeLayout = d3.tree().size([width, height]);
      const root = d3.hierarchy(data);
      treeLayout(root);

      const g = svg.append('g')
        .attr('transform', `translate(${margin.left},${margin.top})`);

      g.selectAll('.link')
        .data(root.links())
        .enter().append('path')
        .attr('class', 'link')
        .attr('d', d3.linkVertical()
          .x(d => d.x)
          .y(d => d.y));

      const node = g.selectAll('.node')
        .data(root.descendants())
        .enter().append('g')
        .attr('class', 'node')
        .attr('transform', d => `translate(${d.x},${d.y})`);

      node.append('circle')
        .attr('r', 5);

      node.append('text')
        .attr('dy', '.31em')
        .attr('x', d => d.children ? -13 : 13)
        .style('text-anchor', d => d.children ? 'end' : 'start')
        .text(d => d.data.name);
    }
  }
};
</script>

<style>
.link {
  fill: none;
  stroke: #ccc;
  stroke-width: 2px;
}
.node text {
  font: 12px sans-serif;
}
</style>

注意事项

  • ECharts 适合快速实现交互式图表,支持丰富的配置项和动画效果。
  • D3.js 更适合高度定制化的需求,但代码复杂度较高。
  • 两种方法均需在 Vue 生命周期钩子(如 mounted)中初始化图表,确保 DOM 已渲染完成。

标签: vuecharts
分享给朋友:

相关文章

vue实现评论编辑

vue实现评论编辑

Vue 实现评论编辑功能 数据绑定与表单结构 使用 v-model 双向绑定评论内容到表单输入框,确保编辑时能显示原内容并同步修改。示例模板结构: <template> <di…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…