【可视化大屏系列】Echarts之饼图绘制

本文为个人近期学习总结,若有错误之处,欢迎指出!

Echarts之饼图绘制

前言

在前文页面布局DataV 的使用Echarts 的基础使用的基础上,开始绘制大屏中的饼图。

1.需求

饼图展示公司人员学历占比情况。

2.实现效果

3.大概思路

为简化代码量,将基础饼图封装为组件:

(1)子组件绘制基础饼图,只有一个系列(type值为'pie');

(2)父组件向子组件传递数据,数据格式为:

sql 复制代码
[
  { value: 456, name: '大专' },
  { value: 735, name: '本科' },
  { value: 580, name: '硕士' },
  { value: 58, name: '博士' }
]

4.代码实现

子组件写法

HTML

html 复制代码
<template>
  <div class="block" style="height:100%;">
    <dv-border-box-13>
      <div class="title" style="height:25%;">
        学历占比
      </div>
      <div ref="circleArea" :style="{width: '100%',height: '75%'}" />
    </dv-border-box-13>
  </div>
</template>

JavaScript

javascript 复制代码
<script>
export default {
  name: 'circle-pie',
  props: {//子组件接收的数据
    data: {
      type: Array,
      default: () => []
    }
  },
  // eslint-disable-next-line max-lines-per-function
  data () {
    return {
      option: {
        color: [// 扇形的颜色
          '#065aab',
          'rgb(145,204,117)',
          '#0682ab',
          'rgb(238,102,102)'
        ],
        tooltip: {
          trigger: 'item', // 类目触发,axis是坐标轴触发
          formatter: '{a}<br />{b}:{c}<br />占比:{d}%',

          // a:学历情况:series里的name
          // b:本科:series里的data的name
          // c:735:series里的data的value
          // d:echarts自己将值换算的百分数
          backgroundColor: 'rgba(83,164,230,.6)',
          borderColor: 'rgba(83,164,230,1)', // 边框颜色
          textStyle: {// 设置文字样式
            color: 'rgba(255,255,255,1)',
            fontSize: 10
          }
        },
        legend: {// 图例
          orient: 'vertical',
          x: 'right',
          y: 'center',
          left: '80%',// 距离左边为80%
          itemWidth: 10,// 小图标的宽度
          itemHeight: 10,
          textStyle: { // 图例文字的样式
            color: 'rgba(255, 255, 255, 0.5)'
          }
        },
        series: [
          {
            name: '学历情况',
            type: 'pie',
            center: ['50%', '45%'],// 设置饼形图在容器中的位置
            radius: ['0%', '65%'],// 内圆半径和外圆半径
            avoidLabelOverlap: false,
            label: {// 显示标签文字
              show: true,
              color: 'rgba(255,255,255,.7)',
              formatter: '{d}%'

              // formatter: ' {b}:{c}\n{d}%'
            },
            labelLine: {// 显示连接线(图形和文字之间的线)
              show: true,
              lineStyle: {
                color: 'rgba(255, 255, 255, 0.7)'
              },
              smooth: 0.2,

              // 以下两个指线的长度
              length: 7, // 连接扇形图线长
              length2: 12 // 连接文字线长
            },

            // data: [
            //   { value: 1048, name: '博士' },
            //   { value: 735, name: '硕士' },
            //   { value: 580, name: '本科' },
            //   { value: 484, name: '大专' }
            // ]
            data: this.data
          }
        ]
      }
    }
  },
  mounted () {
    this.drawCircle()
  },
  methods: {
    drawCircle () {
      let myCircle = this.$echarts.init(this.$refs.circleArea)
      myCircle.setOption(this.option, true)
      window.addEventListener('resize', () => {
        myCircle.resize()
      })
    }
  }
}
</script>

CSS与前文"柱图绘制"相同,故这里省略。

父组件写法

HTML

html 复制代码
<circle-chart :data="circleData" />

Javascript

引入组件和注册组件的部分代码与前文"柱图绘制"相似,这里写关键代码:

javascript 复制代码
data(){
  return {
    // 圆环饼图传递给子组件的数据
    circleData: [
      { value: 456, name: '大专' },
      { value: 735, name: '本科' },
      { value: 580, name: '硕士' },
      { value: 58, name: '博士' }
    ]
  }
}

5.附加

(1)圆环饼图的绘制

如:要实现空心圆环饼图

要点:修改series中系列的radius属性

javascript 复制代码
// 内圆半径和外圆半径
radius: ['30%', '65%']

(2)南丁格尔玫瑰饼图

需求:将上述圆环饼图改为玫瑰饼图。
要点:修改series中系列的roseType属性

A.半径展示数据的大小

sql 复制代码
// 饼形图的显示模式:半径模式,半径展示数据的大小
roseType: 'radius'

B.面积展示数据的大小

sql 复制代码
// 饼形图的显示模式:面积模式,面积展示数据的大小
roseType: 'area'
相关推荐
一袋米扛几楼985 分钟前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue
网络点点滴18 分钟前
前端与后端的区别与联系
前端
EnCi Zheng43 分钟前
M5-markconv自定义CSS样式指南 [特殊字符]
前端·css·python
kyriewen1 小时前
你的网页慢,用户不说直接走——前端性能监控教你“读心术”
前端·性能优化·监控
广州华水科技1 小时前
北斗GNSS变形监测在大坝安全监测中的应用与优势分析
前端
前端老石人1 小时前
前端开发中的 URL 完全指南
开发语言·前端·javascript·css·html
CAE虚拟与现实1 小时前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端
Sarvartha1 小时前
三目运算符
linux·服务器·前端
晓晨的博客1 小时前
ROS1录制的bag包转换为ROS2格式
前端·chrome
Wect1 小时前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript