当前位置:首页 > VUE

vue实现扇形图

2026-03-10 07:22:20VUE

使用 SVG 绘制扇形图

在 Vue 中可以通过 SVG 的 <path> 元素绘制扇形。计算扇形的路径需要用到极坐标公式,结合 d 属性生成路径数据。

计算公式

  • 扇形路径由圆心、半径、起始角度和结束角度决定。
  • 路径命令 M(移动到起点)、A(画弧)、L(画线到圆心)、Z(闭合路径)。

示例代码

vue实现扇形图

<template>
  <svg width="200" height="200" viewBox="0 0 200 200">
    <path :d="getSectorPath(100, 100, 80, 0, 90)" fill="#42b983" />
    <path :d="getSectorPath(100, 100, 80, 90, 180)" fill="#ff7e67" />
  </svg>
</template>

<script>
export default {
  methods: {
    getSectorPath(cx, cy, r, startAngle, endAngle) {
      const startRad = (startAngle * Math.PI) / 180;
      const endRad = (endAngle * Math.PI) / 180;
      const x1 = cx + r * Math.cos(startRad);
      const y1 = cy + r * Math.sin(startRad);
      const x2 = cx + r * Math.cos(endRad);
      const y2 = cy + r * Math.sin(endRad);
      const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;
      return `M ${cx} ${cy} L ${x1} ${y1} A ${r} ${r} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`;
    },
  },
};
</script>

使用 ECharts 实现扇形图

ECharts 提供更丰富的图表配置,适合复杂需求。通过 Vue-ECharts 库可以快速集成。

安装依赖

vue实现扇形图

npm install echarts vue-echarts

示例代码

<template>
  <v-chart :option="chartOption" style="height: 400px" />
</template>

<script>
import { use } from "echarts/core";
import { PieChart } from "echarts/charts";
import { TitleComponent, TooltipComponent } from "echarts/components";
import VChart from "vue-echarts";
use([PieChart, TitleComponent, TooltipComponent]);

export default {
  components: { VChart },
  data() {
    return {
      chartOption: {
        title: { text: "扇形图示例" },
        series: [
          {
            type: "pie",
            radius: ["50%", "70%"],
            data: [
              { value: 40, name: "A" },
              { value: 30, name: "B" },
              { value: 20, name: "C" },
            ],
          },
        ],
      },
    };
  },
};
</script>

使用 D3.js 动态生成扇形图

D3.js 适合需要高度自定义的场景,结合 Vue 实现动态数据绑定。

示例代码

<template>
  <svg ref="chart" width="200" height="200"></svg>
</template>

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

export default {
  mounted() {
    this.drawChart();
  },
  methods: {
    drawChart() {
      const data = [30, 70];
      const svg = d3.select(this.$refs.chart);
      const pie = d3.pie()(data);
      const arc = d3
        .arc()
        .innerRadius(0)
        .outerRadius(80);

      svg
        .selectAll("path")
        .data(pie)
        .enter()
        .append("path")
        .attr("d", arc)
        .attr("fill", (d, i) => (i === 0 ? "#42b983" : "#ff7e67"))
        .attr("transform", "translate(100, 100)");
    },
  },
};
</script>

注意事项

  • 性能优化:大数据量时考虑使用 Canvas(如 ECharts)替代 SVG。
  • 响应式设计:通过监听窗口大小变化动态调整图表尺寸。
  • 动画效果:ECharts 或 D3.js 支持过渡动画,增强用户体验。

标签: 扇形vue
分享给朋友:

相关文章

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Router…

vue实现gps

vue实现gps

Vue 中实现 GPS 定位功能 在 Vue 中实现 GPS 定位功能通常依赖于浏览器的 Geolocation API 或第三方地图服务(如高德、百度地图等)。以下是两种常见的实现方式: 使用浏览…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…

vue实现阻塞

vue实现阻塞

Vue 实现阻塞的方法 在 Vue 中实现阻塞操作通常涉及异步控制、状态管理或生命周期钩子的使用。以下是几种常见方法: 使用 async/await 处理异步阻塞 通过 async/await 可…

vue打包实现推送

vue打包实现推送

Vue 项目打包与自动化部署推送 打包 Vue 项目 使用以下命令生成生产环境代码,默认输出到 dist 目录: npm run build 配置自动化推送(以 GitHub Pages 为例)…

vue 实现设置密码

vue 实现设置密码

Vue 实现设置密码功能 在 Vue 中实现设置密码功能通常涉及表单输入、验证和提交逻辑。以下是实现的基本步骤和代码示例。 创建密码表单组件 使用 Vue 的单文件组件(SFC)创建一个密码设置表单…