Skip to content

折线图

效果图

图片

代码

html
<template>
  <div class="page">
    <div class="title">电压瞬时波峰图</div>
    <div id="main"></div>
  </div>
</template>

<script setup>
  import * as echarts from "echarts";
  import { ref, onMounted, onBeforeUnmount, markRaw } from "vue";
  const myChart = ref(null);

  onMounted(() => {
    echartinit();
  });

  onBeforeUnmount(() => {
    window.removeEventListener("resize", function () {
      myChart.value.resize();
    });
  });

  // 设置字体
  const getfontsize = (size) => {
    let clientWidth = document.body.clientWidth;
    return (clientWidth / 1920) * size;
  };

  const echartinit = () => {
    // 找到Echart元素
    const chartDom = document.getElementById("main");

    // 默认的时候支持light或者dark两种样式 必须引入markRaw 取消数据响应
    myChart.value = markRaw(echarts.init(chartDom, "light"));

    // 设置图表得options

    // 指定图表的配置项和数据
    // 指定图表的配置项和数据
    let options = {
      title: {
        text: "某地区蒸发量和降水量",
        subtext: "纯属虚构",
        textAlign: "center", //居中方式 可以是left center right
        subtext: "副标题",
        x: "center",
        subtextStyle: {
          color: "red",
        },
      },
      tooltip: {
        trigger: "axis",
        //trigger: 'item'
      },
      legend: {
        data: ["最高", "最低"],
      },
      toolbox: {
        show: true,
        orient: "horizontal", //布局方式默认为水平布局,可选'vertical'
        x: "right", //也可以是具体的数值或者是center,right
        y: "top", //也可以是center,left也可以是数值
        color: ["#le90ff", "#22bb22", "#4b0082", "#d2691e"],
        backgroundColor: "#ccc",
        borderWidth: 0,
        padding: 5,
        showTitle: true,
        feature: {
          mark: {
            show: true,
            title: {
              mark: "辅助线-开关",
              markUndo: "辅助线-删除",
              markClear: "辅助线-清空",
            },
            lineStyle: {
              width: 1,
              color: "#1e90ff",
              type: "dashed",
            },
          },

          restore: { show: true },
          saveAsImage: { show: true },
          dataZoom: {
            show: true,
            title: {
              dataZoom: "区域缩放 ",
              dataZoomReset: "区域缩放-后退",
            },
          },
          //数据表格
          dataView: {
            show: true,
            title: "数据视图",
            readOnly: true,
            lang: ["数据视图", "关闭", "刷新"],
            optionToContent: function (opt) {
              console.log(opt);
              var axisData = opt.xAxis[0].data;
              var series = opt.series;
              var table =
                '<table style="width:100%;text-align:center"></tbody><tr>' +
                "<td>时间</td>" +
                "<td>" +
                series[0].name +
                "</td>" +
                "<td>" +
                series[1].name +
                "</td>" +
                "</tr>";
              for (var i = 0; i < axisData.length; i++) {
                table +=
                  "<tr>" +
                  "<td>" +
                  axisData[i] +
                  "</td>" +
                  "<td>" +
                  series[0].data[i] +
                  "</td>" +
                  "<td>" +
                  series[1].data[i] +
                  "</td>" +
                  "</tr>";
              }
              table += "</tbody></table>";

              return table;
            },
          },
          //数据图形选择
          magicType: {
            show: true,
            title: {
              line: "动态类型切换-折线图",
              bar: "动态类型切换-柱形图",
              stack: "动态类型切换-堆积",
              tiled: "动态类型切换-平铺",
            },
            type: ["line", "bar", "stack", "tiled"],
          },
          //还原
          restore: {
            show: true,
            title: "还原",
            color: "black",
          },
          saveAsImage: {
            show: true,
            title: "保存为图片",
            type: "jpeg",
            lang: ["点击本地保存"],
          },
        },
      },

      calculable: true,
      //数据缩放
      dataZoom: {
        show: true,
        realtime: true, //是否实时显示
        start: 10, //选择起始比例
        end: 80, //选择终结比例
      },
      xAxis: [
        {
          type: "category", //value time
          boundaryGap: false, //类目起始和结束两端空白策略,默认true留空,false则顶头
          data: (function () {
            var list = [];
            for (var i = 1; i <= 30; i++) {
              list.push("2013-03-" + i);
            }
            return list;
          })(), //立即执行匿名函数
        },
      ],
      yAxis: [
        {
          type: "value",
          // boundaryGap: [0.1, 0.1], //坐标轴两端空白策略,数组内数值代表百分比
          splitNumber: 4, // 数值轴,分割段数 ,默认为5
        },
      ],
      series: [
        {
          name: "最高",
          type: "line",
          data: (function () {
            var list = [];
            for (var i = 1; i <= 30; i++) {
              list.push(Math.round(Math.random() * 30));
            }
            return list;
          })(),
          markPoint: {
            data: [
              { type: "max", name: "最大值" },
              { type: "min", name: "最小值" },
            ],
          },
          markLine: {
            data: [{ type: "average", name: "平均值" }],
          },
        },
        {
          name: "最低",
          type: "line",
          data: (function () {
            var list = [];
            for (var i = 1; i <= 30; i++) {
              list.push(Math.round(Math.random() * 10));
            }
            return list;
          })(),
          markPoint: {
            data: [
              {
                name: "随机点",
                value: 9,
                xAxis: 10,
                yAxis: 13,
                symbolSize: 18,
              },
              { name: "年最低", value: 22.3, xAxis: 11, yAxis: 23 },
            ],
          },
          markLine: {
            data: [{ type: "average", name: "平均值" }],
          },
        },
      ],
    };
    myChart.value.setOption(options);
    // 监听改变大小
    window.addEventListener("resize", function () {
      myChart.value.resize();
    });
  };
</script>

<style lang="scss" scoped>
  .page {
    overflow: hidden;
    .title {
      font-size: 16px;
      color: black;
      margin: 0 auto;
      text-align: center;
      font-size: 36px;
    }
    #main {
      width: 1000px;
      height: 400px;
      border: 1px solid #ccc;
      margin: 0 auto;
      margin-top: 20px;
    }
  }
</style>