定制化开发echarts柱状图,不同颜色,立体,lable不同颜色,lable有背景图。

echarts,不同颜色,立体,lable不同颜色,lable有背景图。

文章目录


序言:笔记记录,定制化开发下图实现方法。使用技术vue2+echarts@4.5, echarts定制化开发已经全局引入

实现路径

  • 定制化开发设置坐标轴不显示
  • 配置series,使用echarts定制化开发提供的象形柱图(pictorialBar)定制化开发画出上下椭圆。使用柱状图画出柱体。
  • 配置上部椭圆的lable,柱体的lable。

代码实现

//数据形式//上下椭圆topPicList: [        { value: 20, label: { color: "rgba(21, 100, 232, 1)" } },        { value: 40, label: { color: "rgba(21, 100, 232, 1)" } },        { value: 30, label: { color: "rgba(6, 210, 141, 1)" } },        { value: 80, label: { color: "rgba(251, 177, 0, 1)" } },        { value: 60, label: { color: "rgba(0, 255, 255, 1)" } },  ],//柱状图barList: [        {          value: 20,          name: "纺织类",          percentage: "4.9%",        },        {          value: 40,          name: "农产品",          percentage: "5.8%",        },        {          value: 30,          name: "生活用品",          percentage: "10.72%",        },        {          value: 80,          name: "化纤类",          percentage: "14.33%",        },        {          value: 60,          name: "纺织类",          percentage: "64.21%",        },      ],    dataList: [20, 40, 30, 80, 60],
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

设置坐标轴不可见

let option = {      grid: {        top: "30%",        left: "10%",        right: "4%",        bottom: "14%",        containLabel: false,      },     //grid用于设置图形位置。      xAxis: {        data: ["2012", "2014", "2018", "2020", "2022"],        axisTick: {          show: false,        },        axisLine: {          show: false,        },        axisLabel: {          show: false,          textStyle: {            color: "#e54035",          },        },      },      yAxis: {        splitLine: {          show: false,        },        axisTick: {          show: false,        },        axisLine: {          show: false,        },        axisLabel: {          show: false,        },      },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

配置上下椭圆

// 下部椭圆 {  name: "",  type: "pictorialBar",  symbolSize: [30, 10], //宽高  symbolOffset: [0, 6], //偏移  // "barWidth": "20",  z: 12,  data: this.dataList,  itemStyle: {    normal: {      color: (params) => {        return this.linearFn(params);      },    },  },},  // 上部椭圆           {  name: "",  type: "pictorialBar",  symbolSize: [30, 10],  symbolOffset: [0, 6],  // "barWidth": "20",  z: 12,  data: this.dataList,  itemStyle: {    normal: {      color: (params) => {        return this.linearFn(params);       },    },  },},        //methods中的方法linearFn(params) {   //不同柱子上椭圆的颜色数组。  let ColorList = [    ["rgba(63, 168, 242, 1)", "rgba(21, 100, 232, 1)"],    ["rgba(63, 168, 242, 1)", "rgba(21, 100, 232, 1)"],    ["rgba(163, 255, 224, 1)", "rgba(6, 210, 141, 1)"],    ["rgba(255, 230, 170, 1)", "rgba(251, 177, 0, 1)"],    ["rgba(0, 255, 255, 1)", "rgba(0, 255, 255, 1)"],  ];  let index = params.dataIndex;  //椭圆颜色渐变,   return new echarts.graphic.LinearGradient(0, 0, 1, 0, [    {      offset: 0,      color: ColorList[index][0],    },    {      offset: 1,      color: ColorList[index][1],    },  ]);},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

因为每个柱状图的颜色不一样,并且有。所以在itemStyle中配置。

在这里需要注意的是,这里使用this.4echarts会报错,需要重新引入echarts。 import * as echarts from “echarts”;
我想大概是this的原因吧,但是我将this输出后没有看出来哪里有什么不同,哪位大佬知道可以指点一二。

配置柱状图,和配置每个椭圆的颜色一样,在itemStyle中使用函数动态

{  type: "bar",  //silent: true,  barWidth: "30",  data: this.barList,  itemStyle: {    normal: {      color: (params) => {        return this.radialFn(params);      },    },  },},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

现在将所有配置整理一下,变为如下所示

let option = {  grid: {    top: "30%",    left: "10%",    right: "4%",    bottom: "14%",    containLabel: false,  },  xAxis: {    data: ["2012", "2014", "2018", "2020", "2022"],    axisTick: {      show: false,    },    axisLine: {      show: false,    },    axisLabel: {      show: false,      textStyle: {        color: "#e54035",      },    },  },  yAxis: {    splitLine: {      show: false,    },    axisTick: {      show: false,    },    axisLine: {      show: false,    },    axisLabel: {      show: false,    },  },  series: [    {      name: "",      type: "pictorialBar",      symbolSize: [30, 10],      symbolOffset: [0, -6], // 上部椭圆      symbolPosition: "end",      z: 12,      // "barWidth": "0",      data: this.topPicList,      itemStyle: {        normal: {          color: (params) => {            return this.linearFn(params);          },        },      },    },    {      name: "",      type: "pictorialBar",      symbolSize: [30, 10],      symbolOffset: [0, 6], // 下部椭圆      // "barWidth": "20",      z: 12,      data: this.dataList,      itemStyle: {        normal: {          color: (params) => {            return this.linearFn(params);          },        },      },    },    {      type: "bar",      //silent: true,      barWidth: "30",      data: this.barList,      itemStyle: {        normal: {          color: (params) => {            return this.radialFn(params);          },        },      },    },  ],};//获取元素this.myChart = this.$echarts.init(this.$refs.myechart);//绘图this.myChart.setOption(option);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

现在图形有了,现在就是让图形顶部的字儿和图形对应起来。

NO.排名lble配置

这里我选择配置在上部椭圆顶部

{  name: "",  type: "pictorialBar",  symbolSize: [30, 10],  symbolOffset: [0, -6], // 上部椭圆  symbolPosition: "end",  z: 12,  label: {    normal: {      show: true,      position: "top",  //在顶部显示      fontSize: 16,      fontWeight: "bold",      formatter: (params) => {        //去重,排序,这里去重的目的是防止排名混乱        let list = Array.from(          new Set(this.dataList.sort((a, b) => b - a))        );        let index = list.findIndex((item) => item === params.value) + 1;        return `NO.${index}`;      },    },  },  data: this.topPicList,  itemStyle: {    normal: {      color: (params) => {        return this.linearFn(params);      },    },  },},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

柱状图顶部配置,lable背景图

{    type: "bar",    //silent: true,    barWidth: "30",    data: this.barList,    itemStyle: {        normal: {          color: (params) => {            return this.radialFn(params);          },       },    },    label: {        normal: {          show: true,          position: "top",          distance: 35,          align: "center",          // backgroundColor: "inherit",          // padding: [3, 10, 10, 5],          formatter: (params) => {            if (params.name === "纺织类") {              return [`{bg1|${params.name} ${params.data.percentage}}`];            } else if (params.name === "农产品") {              return [`{bg2|${params.name} ${params.data.percentage}}`];            } else if (params.name === "生活用品") {              return [`{bg3|${params.name} ${params.data.percentage}}`];            } else if (params.name === "化纤类") {              return [`{bg4|${params.name} ${params.data.percentage}}`];            } else {              return [`{bg5|${params.name} ${params.data.percentage}}`];            }          },          rich: {            bg1: {              color: "#fff",              fontSize: 12,              height: 22,              lineHeight: 20,              backgroundColor: {                image: require("@/views/dataanalysis/listOfTopics/economic/images/light5.d.png"),              },            },            bg2: {              color: "#fff",              fontSize: 12,              height: 22,              lineHeight: 20,              backgroundColor: {                image: require("@/views/dataanalysis/listOfTopics/economic/images/light4.d.png"),              },            },            bg3: {              color: "#fff",              fontSize: 12,              height: 22,              lineHeight: 20,              backgroundColor: {                image: require("@/views/dataanalysis/listOfTopics/economic/images/light3.d.png"),              },            },            bg4: {              color: "#fff",              fontSize: 12,              height: 22,              lineHeight: 20,              backgroundColor: {                image: require("@/views/dataanalysis/listOfTopics/economic/images/light2.d.png"),              },            },            bg5: {              color: "#fff",              fontSize: 12,              height: 22,              lineHeight: 20,              backgroundColor: {                image: require("@/views/dataanalysis/listOfTopics/economic/images/light1.d.png"),              },            },          },        },  },},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

这里需要注意的是背景图需要使用require引入,不然会出现找不到的情况,也可以将图片存在public目录的img文件夹下,可以不使用require引入

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发