首页 vue案例 正文
Vue中基于Echarts的双正方面柱状图

 2023-11-15    81  

             效果图:

1.gif

在效果中可以清晰的看见 当鼠标移动到柱形图上面的时候 会显示 当前柱形图的全部信息 并且在右上角给三种状态设置了对应的按钮 可以自由的去操控 向显示对比的内容

html:

主要载具还是myChart盒子
image.png

data中需要准备的数据 主要的时当前 柱形图中各个部门 以及反馈 未反馈 超时反馈三个数组

image.png

声明一个方法 在内部去初始化echarts表格 并配置基本

image.png

绘制图标:

image.png

柱形图的排列方向以及四边边界等

image.png

x轴与y轴各显示对应的内容

       xAxis: [
            {
              type: "category",
              data: this.deptArray,
              axisLabel: {
                interval: 0,
                fontFamily: "Arial",
                fontWeight: "bold",
                fontSize: 12,
                align: "center",
                // 重点内容:自定义横轴显示的内容及格式
                formatter: function (value) {
                  let str = "";
                  let num = 4; //每行显示字数
                  let valLength = value.length; //该项x轴字数
                  let rowNum = Math.ceil(valLength / num); // 行数

                  if (rowNum > 1) {
                    for (let i = 0; i < rowNum; i++) {
                      let temp = "";
                      let start = i * num;
                      let end = start + num;

                      temp = value.substring(start, end) + "\n";
                      str += temp;
                    }
                    return str;
                  } else {
                    return value;
                  }
                },
              },
            },
          ],
          yAxis: [
            {
              name: "反馈数/个",
              type: "value",
              show: false,
              interval: 2,
              axisLabel: {
                formatter: "{value}",
              },
            },
          ],

每一个柱形图的反馈信息内容

 series: [
            {
              name: "已反馈",
              type: "bar",
              stack: "反馈数",
              data: this.huiFuList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value > 0) {
                        return params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#74BB44",
            },
            {
              name: "未反馈",
              type: "bar",
              stack: "反馈数",
              data: this.noHuiFuList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value > 0) {
                        return params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#F70909",
            },
            {
              name: "超时反馈",
              type: "bar",
              stack: "反馈数",
              data: this.chaoShiList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value < 0) {
                        return -params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#9900FF",
            },
          ],
        });
      },
    },

最后在mounted函数中调用drawBar方法就可以了

image.png

完整代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>vue中基于Echarts的双正方面柱状图</title>
  </head>
  <body>
    <div id="app">
      <div style="margin: 30px 250px">
        <p>
          介绍:y轴双正方向柱图,所谓双正方向,横轴上下展现出来的数据都是正值。横轴上方数据和为100%,下方是总数据中的一项展示。
        </p>
        <p>
          实现:主要在于对数据的处理上,对横轴下方的数据处理展示出正值,从而营造出双正方向的假象。
        </p>
      </div>
      <div class="myChart" :style="{height:'500px',margin:'0 200px'}"></div>
    </div>
  </body>
</html>
<script src="./js/vue.js"></script>
<script src="./js/echarts.js"></script>
<script>
  const app = new Vue({
    el: "#app",
    data() {
      return {
        deptArray: [
          "人力资源部",
          "业务开发部",
          "资料处理部",
          "广告宣传部",
          "后勤保障部",
          "信用审核部",
          "公共关系部",
        ],
        huiFuList: [8, 7, 9, 5, 4, 5, 3],
        noHuiFuList: [7, 5, 4, 6, 3, 1, 2],
        chaoShiList: [-3, -2, -3, 0, -1, -2, -4],
      };
    },
    mounted() {
      this.drawBar();
    },
    methods: {
      drawBar() {
        // 基于准备好的dom,初始化echarts实例
        let myChart = echarts.init(document.querySelector(".myChart"));
        console.log(myChart);
        // 绘制图表
        myChart.setOption({
          // 头部标题
          title: {
            left: "center",
            text: "某工厂各部门对某事件关心反馈值统计",
          },
          // 表格主体
          tooltip: {
            trigger: "axis",
            axisPointer: {
              type: "shadow",
              crossStyle: {
                color: "#999",
              },
            },
            // 重点内容:自定义悬浮显示的内容及格式
            // formatter: function (params) {
            //   let title = "";
            //   let rows = "";
            //   if (params.length > 0) {
            //     title = params[0].name;
            //   }
            //   for (let i = 0; i < params.length; i++) {
            //     if (params[i].value > 0) {
            //       rows +=
            //         "<br />" + params[i].seriesName + ": " + params[i].value;
            //     } else {
            //       rows +=
            //         "<br />" + params[i].seriesName + ": " + -params[i].value;
            //     }
            //   }
            //   return title + rows;
            // },
          },
          toolbox: {},
          legend: {
            data: ["未反馈", "已反馈", "超时反馈"],
            // 图例排列方向,纵排
            orient: "vertical",
            // 图例位置
            right: 50,
            top: 50,
            bottom: 20,
          },
          // 图表(上、下、左、右边界的宽度)
          grid: {
            left: "3%",
            right: "15%",
            bottom: "3%",
            containLabel: true,
          },
          calculable: true,
          xAxis: [
            {
              type: "category",
              data: this.deptArray,
              axisLabel: {
                interval: 0,
                fontFamily: "Arial",
                fontWeight: "bold",
                fontSize: 12,
                align: "center",
                // 重点内容:自定义横轴显示的内容及格式
                formatter: function (value) {
                  let str = "";
                  let num = 4; //每行显示字数
                  let valLength = value.length; //该项x轴字数
                  let rowNum = Math.ceil(valLength / num); // 行数

                  if (rowNum > 1) {
                    for (let i = 0; i < rowNum; i++) {
                      let temp = "";
                      let start = i * num;
                      let end = start + num;

                      temp = value.substring(start, end) + "\n";
                      str += temp;
                    }
                    return str;
                  } else {
                    return value;
                  }
                },
              },
            },
          ],
          yAxis: [
            {
              name: "反馈数/个",
              type: "value",
              show: false,
              interval: 2,
              axisLabel: {
                formatter: "{value}",
              },
            },
          ],
          series: [
            {
              name: "已反馈",
              type: "bar",
              stack: "反馈数",
              data: this.huiFuList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value > 0) {
                        return params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#74BB44",
            },
            {
              name: "未反馈",
              type: "bar",
              stack: "反馈数",
              data: this.noHuiFuList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value > 0) {
                        return params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#F70909",
            },
            {
              name: "超时反馈",
              type: "bar",
              stack: "反馈数",
              data: this.chaoShiList,
              barWidth: 30, //柱图宽度
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "inside", //在内部显示
                    textStyle: {
                      //数值样式
                      color: "black",
                      fontSize: 12,
                    },
                    formatter: function (params) {
                      if (params.value < 0) {
                        return -params.value;
                      } else {
                        return " ";
                      }
                    },
                  },
                },
              },
              color: "#9900FF",
            },
          ],
        });
      },
    },
    watch: {
      message() {},
    },
  });
</script>


  •  标签:  

原文链接:http://1.15.94.33/?id=207

=========================================

http://1.15.94.33/ 为 “前端日记簿” 唯一官方服务平台,请勿相信其他任何渠道。