echats实现进度条、饼状图、折线图、柱状图、柱状图和折线图的集合体

记录工作中用到的一些echats图标

1、进度条

有两种方式:
a、通过elemnt-ui组件el-progress组件实现在这里插入图片描述

上面的进度条光使用el-progress无法实现,el-progress不支持汉字,需要使用css+div进行调整
下面是实现的代码:
html:

  <div class="content-right-top">
            <el-progress
              class="content-right-progress"
              type="circle"
              :show-text="false" 
              :percentage="45"
              :stroke-width="13"
              color="#34BFA3"
            />
            <div class="content-progress-success">
              <div class="progress-success-top">
                {{ data }}
              </div>
              <div class="progress-success-down">完成率</div>
            </div>
            <div class="content-progress-plan">计划完成率</div>
          </div>

:show-text=“false” 不显示组件本来的字体, 我们是用css将字体挪动到进度条的中心

css:

 .content-right-top {
          width: 100%;
          height: 38%;

          .el-progress {
            margin-left: 5.5vw;
            margin-top: 2.2vh;
            position: relative;

            ::v-deep .el-progress-circle {
              width: 18.7222vh !important;
              height: 18.7222vh !important;
            }

            ::v-deep .el-progress__text {
              font-size: 2.8556vh !important;
              font-weight: 600;
              color: #34BFA3;
              line-height: 3.7037vh;
            }
          }

b、使用echats自定义的特殊的滚动条
在这里插入图片描述
代码部分

<template>
  <div class="main-dail">
    <div class="main-dail-content" style="display: flex">
      <div id="main-dial-1" ref="dial" class="main-dail-item" style="width: 23vw; height: 23vh; margin-left: -8vw" />
    </div>
  </div>
</template>
<script>
export default {
  name: 'PlanListDial',
  data() {
    return {
      num: 50
    }
  },
  mounted() {
    this.echatsInit()
  },
  methods: {
    echatsInit() {
      const echart = this.$echarts.init(document.getElementById('main-dial-1'))
      const assistData = []
      const colorList = []
      const num = this.num
      for (let i = 0; i < 50; i++) { // 这里可以通过更改数值进行设置格子宽度,数值越小格子越宽
        if (i < num / 2) {
          assistData.push({
            value: 2
          })
          colorList.push('#44A0FF')
        } else {
          assistData.push({
            value: 2
          })
          colorList.push('#8D959F')
        }
      }
      var option = {
        // 标题组件,包含主标题和副标题
        title: {
          show: true,
          text: '进度条',
          x: 'center',
          y: 'bottom',
          textStyle: {
            fontSize: 25,
            fontStyle: 'normal',
            fontWeight: 'normal'
          }
        },
        avoidLabelOverlap: false,
        graphic: {
          type: 'text',
          left: 'center',
          top: 'center',
          style: {
            text: num,
            textAlign: 'center',

            fill: '#44A0FF',
            fontSize: 45
          }
        },
        series: [
          {
            type: 'pie',
            color: colorList,
            // 饼图的半径,数组的第一项是内半径,第二项是外半径
            radius: ['50%', '65%'],
            minAngle: 0, // 最小角度改为0
            selectedOffset: 1, // 选中是扇区偏移量
            // 是否启用防止标签重叠策略,默认开启
            avoidLabelOverlap: false,
            hoverAnimation: false,
            itemStyle: {
              normal: {
                // color: 各异,
                borderColor: '#fff',
                borderWidth: 5,
                borderRadius: 10,
                label: {
                  show: true,
                  position: 'outer'
                },
                labelLine: {
                  show: true,
                  length: 20,
                  lineStyle: {
                    width: 2,
                    type: 'solid'
                  }
                }
              }
            },
            // 标签的视觉引导线样式,在 label 位置 设置为'outside'的时候会显示视觉引导线
            labelLine: {
              normal: {
                show: false
              }
            },
            data: assistData
          }
        ]
      }
      echart.setOption(option)
    }
  }
}
</script>

<style lang="less" scoped>
#main-dial {
  main-dail-content {
    height: 300px;
    width: 300px;
    #main-dail-1 {
      width: 100px ;
      height: 100px;
    }
    #main-dail-3 {
      width: 100px;
      height: 100px;
    }
  }
}

.dial-text {
  font-size: 12rem;
  color: #44A0FF;
  top: 39vh;
  right: 70vh;
}
</style>

2、饼状图

这个饼状图比较复杂,这个饼状图弄会的话,其他一些简单的饼状图就很容易实现了,这个可以优化,我功能实现就没有优化了
在这里插入图片描述
代码:

<template>
  <div id="chart" class="chart" style="width: 40vh; height: 40vh" />
</template>

<script>
export default {
  name: 'DispatchManagementKanbanPie',
  mounted() {
    this.drawChart()
  },
  methods: {
    drawChart() {
      // 基于准备好的dom,初始化echarts实例
      const echart = this.$echarts.init(document.getElementById('chart'))
      var option = {
        // 设置
        title: {
          show: false,
          text: '某某班学生当月的考试成绩分布',
          subtext: '9月',
          x: 'center'
        },
        tooltip: {
          trigger: 'item',
          formatter: '{b} : {c}分 ({d}%)'
        },
        // 对图例组件的不同系列进行标记说明
        legend: [
          {
            orient: 'horizontal',
            x: '5%',
            y: '2%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['语文']
          },
          {
            orient: 'horizontal',
            x: '25%',
            y: '2%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['数学']
          },
          {
            orient: 'horizontal',
            x: '45%',
            y: '2%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['英语']
          },
          {
            orient: 'horizontal',
            x: '65%',
            y: '2%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['物理']
          },
          {
            orient: 'horizontal',
            x: '5%',
            y: '7%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['化学']
          },
          {
            orient: 'horizontal',
            x: '25%',
            y: '7%',
            align: 'left',
            textStyle: { fontSize: '15' },
            data: ['生物']
          }
        ],
        // 系列列表
        series: [
          {
            color: ['#4DCB73', '#FAD337', '#36CBCB', '#975FE4', '#3AA0FF', '#F2637B'],
            type: 'pie', // 数据统计图的类型
            radius: ['0%', '48%'],
            center: ['45%', '50%'],
            label: {
              normal: {
                position: 'inner',
                textStyle: { fontSize: '12' },
                formatter: function(val) { // 让series 中的文字进行换行
                  return val.name
                }
              }
            },
            // 放置要展示的数据
            data: [
              { value: 40, name: '40%' },
              { value: 30, name: '30%' },
              { value: 9, name: '9%' },
              { value: 8, name: '8%' },
              { value: 7, name: '7%' },
              { value: 6, name: '6%' }
            ]
          },
          {
            color: ['#4DCB73', '#FAD337', '#36CBCB', '#975FE4', '#3AA0FF', '#F2637B'],
            type: 'pie', // 数据统计图的类型
            radius: ['0%', '48%'],
            center: ['45%', '50%'],
            label: {
              normal: {
                textStyle: { fontSize: '15' }
              }
            },
            // 放置要展示的数据
            data: [
              { value: 40, name: '40分' },
              { value: 30, name: '30分' },
              { value: 9, name: '9分' },
              { value: 8, name: '8分' },
              { value: 7, name: '7分' },
              { value: 6, name: '6分' }
            ]
          },
          {
            color: ['#4DCB73', '#FAD337', '#36CBCB', '#975FE4', '#3AA0FF', '#F2637B'],
            type: 'pie', // 数据统计图的类型
            radius: ['0%', '48%'],
            center: ['45%', '50%'],
            itemStyle: {
              normal: {
                label: {
                  show: false
                }
              }
            },
            label: {
              normal: {
                position: 'inner'
              }
            },
            // 放置要展示的数据
            data: [
              { value: 40, name: '语文' },
              { value: 30, name: '数学' },
              { value: 9, name: '英语' },
              { value: 8, name: '物理' },
              { value: 7, name: '化学' },
              { value: 6, name: '生物' }
            ]
          }
        ]
      }
      echart.setOption(option)
    }
  }
}
</script>

<style scoped>

</style>

3、折线图

在这里插入图片描述
代码:

<template>
  <div id="main-discount" ref="discount" style="width: 90%; height: 40vh" />
</template>
<script>
export default {
  name: 'PlanListDiscount',
  data() {
    return {}
  },
  computed: {},
  mounted() {
    this.echarts()
  },
  methods: {
    echarts() {
      const COLOR_WHITE = '#FFFFFF'
      const myChart = this.$echarts.init(document.getElementById('main-discount'))
      const mydate = ['0:00', '3:00', '6:00', '9:00', '12:00', '15:00', '18:00', '21:00', '24:00']
      myChart.setOption({
        backgroundColor: COLOR_WHITE,
        title: {
          textStyle: {
            fontWeight: 'normal',
            fontSize: 20,
            color: '#919398',
            fontFamily: 'Source Han Sans SC'
          },
          left: '5%',
          top: 5
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            lineStyle: {
              color: '#57617B'
            }
          }
        },
        legend: {
          icon: 'rect',
          itemWidth: 20,
          itemHeight: 10,
          orient: 'vertical',
          itemGap: 13,
          top: '5%',
          right: 20,
          textStyle: {
            fontSize: 14,
            color: '#919398'
          }
        },
        grid: {
          show: false,
          left: '8%',
          right: '8%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            boundaryGap: false,
            axisLine: {
              show: false,
              lineStyle: {
                color: '#57617B'
              }
            },
            // 坐标轴刻度相关设置
            axisTick: {
              show: false
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },
            data: mydate
          }
        ],
        yAxis: [
          {
            type: 'value',
            splitNumber: 4,
            offset: 30,
            axisTick: {
              show: false
            },
            axisLine: {
              show: false
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },

            splitLine: {
              show: true,
              lineStyle: {
                type: 'dashed' // 虚线
              }
            }
          }
        ],
        series: [
          {
            type: 'line',
            smooth: false,
            symbol: 'circle',
            symbolSize: 10, // 拐点大小
            showSymbol: true, // 拐点是否显示

            lineStyle: {
              color: '#BED7FD',
              normal: {
                width: 2
              }
            },
            areaStyle: {
              color: {
                type: 'linear',
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                // 折线图阴影部分的颜色,设置其透明度,去掉该属性就没有阴影部分的代码了
                colorStops: [
                  {
                    offset: 0,
                    // eslint-disable-next-line no-undef
                    color: 'rgba(0, 150, 0, 0.3)' // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: 'rgba(0, 150, 0, 0)'// 100% 处的颜色
                  }
                ],
                global: false // 缺省为 false
              },
              shadowColor: '#BED7FD',
              shadowBlur: 10
            },
            itemStyle: {
              color: '#BED7FD' // 折线的颜色
            },
            data: [90, 73, 85, 65, 70, 68, 60, 59, 58]
          }
        ]
      })
    }
  }
}
</script>
<style lang="less" scoped>
</style>

4、柱状图

在这里插入图片描述
代码:

<template>
  <div class="histogram-main">
    <div id="main-histogram" ref="histogram" class="main-histogram" style="width: 98%; height: 30vh;margin-top: -0.3vh" />
  </div>
</template>

<script>
export default {
  name: 'DispatchManagementKanbanHistogram',
  mounted() {
    this.echarts()
  },
  methods: {
    echarts() {
      const COLOR_WHITE = '#FFFFFF'
      const myChart = this.$echarts.init(document.getElementById('main-histogram'))
      const mydate = ['1-1', '2-2', '3-3', '5-5', '6-6']
      myChart.setOption({
        backgroundColor: COLOR_WHITE,
        title: {
          textStyle: {
            fontWeight: 'normal',
            fontSize: 20,
            color: '#919398',
            fontFamily: 'Source Han Sans SC'
          },
          left: '5%',
          top: 5
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            lineStyle: {
              color: '#57617B'
            }
          },
          formatter: '{b} : {c}'
        },
        legend: {
          show: false,
          right: 0,
          data: ['柱状图']
        },
        grid: {
          show: false,
          left: '8%',
          right: '8%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            // 下标是否偏移
            boundaryGap: true,
            axisLine: {
              show: false,
              lineStyle: {
                color: '#57617B'
              }
            },
            // 坐标轴刻度相关设置
            axisTick: {
              show: true,
              inside: true,
              lineStyle: {
                color: '#2D5BAF'
              }
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },
            data: mydate
          }
        ],
        yAxis: [
          {
            type: 'value',
            scale: true,
            name: 'y轴',
            min: 0,
            splitNumber: 4,
            axisTick: {
              show: true,
              lineStyle: {
                color: '#919398'
              }
            },
            axisLine: {
              show: true,
              lineStyle: {
                color: '#919398'
              }
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },

            splitLine: {
              show: true
            }
          }
        ],
        series: [
          {
            name: '各机台生产放量',
            type: 'bar',
            label: { // ---图形上的文本标签
              show: false,
              position: 'insideTop', // ---相对位置
              rotate: 0, // ---旋转角度
              color: '#eee'
            },
            itemStyle: { // ---图形形状
              color: '#6AD8AF',
              barBorderRadius: [0, 0, 0, 0]
            },
            barWidth: '30', // ---柱形宽度
            data: [29, 28, 18, 33, 17]
          }
        ]
      })
    }
  }
}
</script>

<style scoped>

</style>

5、柱状图和折线图集合体
在这里插入图片描述
代码:

<template>
  <div class="discount-main-box">
    <div class="discount-title">
      近15日放量日计划完成情况走势图
    </div>
    <div id="main-trend" ref="discount" class="main-trend" style="width: 99%; height: 25vh;margin-top: -0.2vh" />
  </div>

</template>

<script>
export default {
  name: 'DispatchManagementKanbanDiscount',
  props: {},
  mounted() {
    this.echarts()
  },
  methods: {
    echarts() {
      const COLOR_WHITE = '#FFFFFF'
      const myChart = this.$echarts.init(document.getElementById('main-trend'))
      const mydate = ['12-3', '12-4', '12-5', '12-6', '12-7', '12-8', '12-9', '12-10', '12-11', '12-12', '12-13', '12-14', '12-15', '12-16', '12-17']
      myChart.setOption({
        backgroundColor: COLOR_WHITE,
        title: {
          textStyle: {
            fontWeight: 'normal',
            fontSize: 20,
            color: '#919398',
            fontFamily: 'Source Han Sans SC'
          },
          left: '5%',
          top: 5
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            lineStyle: {
              color: '#57617B'
            }
          }
        },
        legend: {
          show: true,
          right: 0,
          data: ['折线', '柱状图']
        },
        grid: {
          show: false,
          left: '8%',
          right: '8%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            name: '(日)',
            boundaryGap: true,
            axisLine: {
              show: false,
              lineStyle: {
                color: '#57617B'
              }
            },
            // 坐标轴刻度相关设置
            axisTick: {
              show: true,
              inside: true,
              lineStyle: {
                color: '#2D5'
              }
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },
            data: mydate
          }
        ],
        yAxis: [
          {
            type: 'value',
            scale: true,
            name: 'y轴',
            min: 0,
            splitNumber: 3,
            axisTick: {
              show: true,
              lineStyle: {
                color: '#919398'
              }
            },
            axisLine: {
              show: true,
              lineStyle: {
                color: '#919398'
              }
            },
            axisLabel: {
              color: '#919398',
              fontSize: 14,
              fontFamily: 'Source Han Sans SC'
            },

            splitLine: {
              show: true
            }
          }
        ],
        series: [
          {
            name: '柱状图',
            type: 'bar',
            label: { // ---图形上的文本标签
              show: false,
              position: 'insideTop', // ---相对位置
              rotate: 0, // ---旋转角度
              color: '#eee'
            },
            itemStyle: { // ---图形形状
              color: '#2D5',
              barBorderRadius: [0, 0, 0, 0]
            },
            barWidth: '20', // ---柱形宽度
            data: [190, 210, 200, 170, 180, 230, 195, 220, 225, 160, 140, 195, 170, 205, 225]
          },
          {
            name: '折线',
            type: 'line',
            smooth: false,
            symbol: 'circle',
            symbolSize: 10, // 拐点大小
            showSymbol: true, // 拐点是否显示
            lineStyle: {
              color: '#38C0A5',
              normal: {
                width: 2
              }
            },
            areaStyle: {
              color: {
                type: 'linear',
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [
                ],
                global: false // 缺省为 false
              },
              shadowColor: '#38C0A5',
              shadowBlur: 10
            },
            itemStyle: {
              color: '#38C0A5' // 折线的颜色
            },
            data: [220, 280, 210, 220, 250, 290, 240, 260, 230, 210, 240, 295, 270, 280, 275]
          }
        ]
      })
    }
  }
}
</script>

<style lang="less" scoped>
.discount-main-box {
  .discount-title {
    font-size: 3rem;
  }
  .main-trend {
    margin-top: 3vh;
  }
}
</style>

对你有帮助的话,就点个赞哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值