eharts图表单位自适配

简介: eharts图表单位自适配

需求描述

以数据的最小值为基准

  • 当最小值超过1分钟时,y轴单位显示“分”
  • 当最小值超过1小时时,y轴单位显示“时”

最终效果

实现思路

在向图表传入数据前,对y轴数据做解析,根据y轴数据最小值的大小,得对应的单位,并对y轴数据根据最终显示的单位进行相应的换算,最终将单位和换算过后的y轴数据,传入图表中显示。

完整范例代码

主页 index.vue

<template>
  <div class="chartBox">
    <Bar1 :data="bar1Data" :unit="bar1Unit" />
  </div>
</template>
<script>
import Bar1 from "@/pages/chartsDemo/chartsLib/bar1.vue";
export default {
  components: { Bar1 },
  mounted() {
    this.bar1Data.xList = [
      "周一",
      "周二",
      "周三",
      "周四",
      "周五",
      "周六",
      "周天",
    ];
    this.bar1Data.yList = [12000, 20000, 15000, 8000, 7000, 11000, 13000];
    this.bar1Unit = this.getUnit(this.bar1Data);
  },
  methods: {
    getUnit(data) {
      let min = Math.min(...data.yList);

      if (min >= 3600) {
        data.yList = data.yList.map((item) => {
          return (item / 3600).toFixed(2);
        });
        return "时";
      } else if (min >= 60) {
        data.yList = data.yList.map((item) => {
          return (item / 60).toFixed(2);
        });

        return "分";
      } else {
        return "秒";
      }
    },
  },
  data() {
    return {
      bar1Data: {},
      bar1Unit: "",
    };
  },
};
</script>
<style scoped>
.chartBox {
  height: 300px;
  width: 600px;
}
</style>


图表组件

src\pages\chartsDemo\chartsLib\bar1.vue

<template>
  <div style="height: 100%;width: 100%" ref="myChart"></div>
</template>

<script>
import echarts from "echarts";

export default {
  props: {
    data: Object,
    unit: String,
  },
  mounted() {
    this.$nextTick(() => {
      this.drawChart();
    });
  },
  methods: {
    drawChart() {
      let option = {
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "shadow",
          },
          backgroundColor: "rgba(9, 24, 48, 0.5)",
          borderColor: "rgba(75, 253, 238, 0.4)",
          textStyle: {
            color: "#fff",
          },
        },
        legend: {
          data: ["阅读时长"],
          right: 60,
          textStyle: {},
        },

        xAxis: {
          type: "category",
          data: this.data.xList,
        },
        yAxis: {
          type: "value",
          name: this.unit,
          nameLocation: "end", //坐标位置,支持start,end,middle
          nameTextStyle: {
            padding: [0, 0, 0, -30], //调整距离坐标位置的距离
          },
        },
        series: [
          {
            name: "阅读时长",
            data: this.data.yList,
            type: "bar",
          },
        ],
      };

      // 2.创建图表
      let chart = echarts.init(this.$refs.myChart);

      // 3,导入图表的配置
      chart.setOption(option);

      // 4添加窗口大小改变监听事件,当窗口大小改变时,图表会重新绘制,自适应窗口大小
      window.addEventListener("resize", function() {
        chart.resize();
      });
    },
  },
};
</script>

<style scoped></style>

目录
相关文章
Springboot项目启动的三种方式
Springboot项目启动的三种方式
837 0
|
6月前
|
机器学习/深度学习 人工智能 负载均衡
Trae 04.22版本深度解析:Agent能力升级与MCP市场对复杂任务执行的革新
在当今快速发展的AI技术领域,Agent系统正成为自动化任务执行和智能交互的核心组件。Trae作为一款先进的AI协作平台,在04.22版本中带来了重大更新,特别是在Agent能力升级和MCP市场支持方面。本文将深入探讨这些更新如何重新定义复杂任务的执行方式,为开发者提供更强大的工具和更灵活的解决方案。
745 1
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
1876 56
|
机器学习/深度学习 数据采集 人工智能
智能化运维:AI在IT运维中的应用与挑战###
本文探讨了人工智能(AI)技术在IT运维领域的应用现状、具体实现方式及其面临的挑战。通过分析AI如何优化故障预测、自动化处理和资源管理,文章旨在揭示AI赋能下运维工作的变革潜力与实践难题,为读者提供对智能化运维趋势的深刻理解。 ###
|
监控 负载均衡 安全
Elasticsearch集群配置优化
Elasticsearch集群配置优化
269 1
|
前端开发 容器
前端 CSS 经典:grid 栅格布局(上)
前端 CSS 经典:grid 栅格布局(上)
578 0
|
安全 Go 开发者
使用 contextvars 管理上下文变量
使用 contextvars 管理上下文变量
300 0
|
JavaScript 网络架构
vue-router 如何找到路由组件?matcher 总结,vue-router Matcher 解析(四)
这篇是 vue-router matcher 系列的总结篇,这里提示一下 matcher 就是 vue-router 中的路由匹配器,负责路由的增删查,当我们进行路由跳转时,是通过 matcher 去匹配到正确路径,然后拿到 component(重定向除外)
|
运维 Java BI
【Java】HIS医院信息化管理系统源码(SaaS模式多医院)
【Java】HIS医院信息化管理系统源码(SaaS模式多医院)
392 2