vue3使用 echarts - 饼图、折线图

下载安装

复制代码
npm install -S echarts

使用

饼图 - 带中心图形 - graphic - elements

js 复制代码
import { onMounted, ref, reactive, unref, nextTick } from "vue";
import * as echarts from "echarts";
import circle from "@/assets/panel/circle.png"
import star from '@/assets/panel/star.png'


/** 页面初始化 */
onMounted(() => {
  drawPieEchart("echart1", rightData.echartData1);
});

/** 饼图-echart */
const drawPieEchart = function (domId: string, data: any[]) {
  const chartDom: any = document.getElementById(domId);
  const myChart: any = echarts.init(chartDom);
  const option: any = {
    color: ['#43A2E7', '#EF6648'],
    tooltip: {
      trigger: "axis",
      axisPointer: {
        type: "shadow",
      },
    },
    graphic: {
      elements: [
        {
          type: 'image',
          style: {
            image: circle,
            width: 90,
            height: 90
          },
          left: 'center',
          top: '106'
        }]
    },
    series: [
      {
        type: "pie",
        top: "6%",
        radius: [70, 60],
        silent: true, // 不响应和触发鼠标事件,默认为 false
        itemStyle: {
          borderRadius: 2,
          borderColor: "#060F1E",
          borderWidth: 2,
        },
        label: {
          show: "true",
          alignTo: "edge",
          position: "outside",
          formatter: function (data: any) {
            return data.name + "\n" + data.percent + "%";
          },
          minMargin: 5,
          edgeDistance: 0,
          lineHeight: 20,
          color: "#fff",
          fontSize: 14,
          rich: {
            value: {
              fontSize: 18,
              color: "#30eeff",
            },
          },
        },
        labeLine: {
          show: "true",
        },
        emphasis: {
          label: {
            show: true,
            fontSize: 20,
            fontWeight: "bold",
          },
        },
        data: data,
      },
    ],
  };
  option && myChart.setOption(option, true);
  // 浏览器窗口大小变化,图表大小自适应
  window.addEventListener("resize", () => {
    myChart.resize();
  });
};

折线图 - 图表标记 markPoint

js 复制代码
/** 折线图-echart */
const drawFoldLine = function (domId: string, data: any) {
  const chartDom: any = document.getElementById(domId);
  const myChart = echarts.init(chartDom);
  const option: any = {
    color: ['#43A2E7', '#EF6648'],
    tooltip: {
      trigger: "axis",
      backgroundColor:"#000910",
      borderWidth:0,
      borderRadius:0,
      textStyle:{
        color:'#fff'
      },
      axisPointer: {
        type: "shadow",
      },
    },
    legend: {
      type: "plain",
      textStyle: {
        color: "#fff",
        fontSize: 12,
      },
      left: 26,
      top: 16,
      data: [
        {
          name: '计划产值',
          icon: 'circle',
        },
        {
          name: '累计完成产值',
          icon: 'circle',
        }
      ],
    },
    grid: {
      left: "3%",
      right: "4%",
      bottom: "3%",
      containLabel: true,
    },
    xAxis: {
      data: data.xAxisData,
      type: "category",
      boundaryGap: false,
      textStyle: {
        fontSize: 12,
        color: "#A5B2BB",
      },
      axisLine: {
        show: true,
        lineStyle: {
          color: "#657A8A",
        },
      },
      axisLabel: {
        showMaxLabel: true,
        showMinLabel: true,
      },
    },
    yAxis: {
      type: "value",
      textStyle: {
        fontSize: 12,
        color: "#A5B2BB",
      },
      axisLine: {
        show: true,
        lineStyle: {
          color: "#657A8A",
        },
      },
      splitLine: { // 修改背景线条样式
        lineStyle: {
          color: "#657A8A", // 线条颜色
          // type: "dashed" // 线条样式,默认是实现,dashed是虚线
        }
      },
    },
    series: [
      {
        data: data.seriesData1,
        type: 'line',
        name: '计划产值',
        smooth: true,
        markPoint: {
          symbol: "image://" + star,
          symbolSize: 16,
          symbolOffset: [0, '-50%'],
          animation: true,
          label: {
            show: true,
            color: '#fff',
            fontSize: 14,
            position: 'top',
            backgroundColor: '#0B2E47',
            padding: [4, 12]
          },
          data: [
            {
              coord: [1, 820],
              value: '特殊标记1',

            },
            {
              coord: [3, 901],
              value: '特殊标记2',
            },
            {
              coord: [6, 1330],
              value: '特殊标记3',
            }
          ]
        }
      },
      {
        data: data.seriesData2,
        type: 'line',
        name: '累计完成产值',
        smooth: true
      }
    ]
  };

  option && myChart.setOption(option, true);
  // 浏览器窗口大小变化,图表大小自适应
  window.addEventListener("resize", () => {
    myChart.resize();
  });
};
相关推荐
ssshooter1 小时前
Tauri 项目实践:客户端与 Web 端的授权登录实现方案
前端·后端·rust
兆子龙1 小时前
【React】19 深度解析:掌握新一代 React 特性
前端·架构
Moment1 小时前
MinIO已死,MinIO万岁
前端·后端·github
无双_Joney2 小时前
心路散文 - 转职遇到AI浪潮,AIGC时刻人的价值是什么?
前端·后端·架构
有意义2 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
小怪点点2 小时前
vue3使用
前端·vue.js
进击的尘埃2 小时前
Vitest 自定义 Reporter 与覆盖率卡口:在 Monorepo 里搞增量覆盖率检测
javascript
进击的尘埃2 小时前
E2E 测试里的网络层,到底该怎么 Mock?
javascript
Bigger3 小时前
CSS 这些年都经历了什么?一次看懂 CSS 的演化史
前端·css·前端工程化
DevUI团队3 小时前
🚀 【Angular】MateChat V20.2.2版本发布,新增8+组件,欢迎体验~
前端·javascript·人工智能