echarts 基础入门(上)

简介: echarts 基础入门(上)

前言:本文档主要讲解 echarts 在 vue3 中的用法,及其 echarts 的一些配置参数含义及用法。示例参考 echarts 示例

一:快速开始

1. 安装 echarts

npm install echarts
# or
pnpm add echarts
# or
yarn add echarts

2. 使用 echarts

<script setup lang="ts">
import { onMounted } from "vue";
import * as echarts from "echarts";
 
const initEchart = () => {
  // 基于准备好的dom,初始化echarts实例
  const myChart = echarts.init(document.getElementById("demo"));
  // 绘制图表
  myChart.setOption({
    title: {
      text: "ECharts 入门示例",
    },
    tooltip: {},
    xAxis: {
      data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
    },
    yAxis: {},
    series: [
      {
        name: "销量",
        type: "bar",
        data: [5, 20, 36, 10, 10, 20],
      },
    ],
  });
};
onMounted(() => {
  initEchart();
});
</script>
 
<template>
  <div id="demo" style="width: 600px; height: 400px">demoEchats</div>
</template>

二:基础概念

1. 图表容器及大小

1.1 设置 dom 节点宽高

推荐通过 css 设置该节点的宽高,该节点的大小默认就是图表的大小,调用 echarts.init 时必须保证容器已经有宽高了。

<div id="demo" style="width: 600px; height: 400px"></div>

1.2 指定图表大小

如果容器未设置宽高,或你希望图表大小不等于容器大小,可以在初始化图表时设置大小。

// 基于准备好的dom,初始化echarts实例
const myChart = echarts.init(document.getElementById("demo"), null, {
  width: 600,
  height: 400,
});

1.3 响应容器大小

有时候我们希望图表可以随容器大小的变化而变化,可以通过监听页面的 resize 事件获取浏览器大小改变的事件,然后调用 echartsInstance.resize 改变图表的大小。

<script setup lang="ts">
import { onMounted, ref } from "vue";
import * as echarts from "echarts";
 
let myChart = null;
const initEchart = () => {
  // 绘制图表
  myChart.setOption({
    title: {
      text: "ECharts 入门示例",
    },
    tooltip: {},
    xAxis: {
      data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
    },
    yAxis: {},
    series: [
      {
        name: "销量",
        type: "bar",
        data: [5, 20, 36, 10, 10, 20],
      },
    ],
  });
};
onMounted(() => {
  // 基于准备好的dom,初始化echarts实例
  myChart = echarts.init(document.getElementById("demo"));
  window.addEventListener("resize", function () {
    myChart.resize();
  });
  initEchart();
});
</script>
 
<template>
  <div id="demo" style="width: 100%; height: 400px">demoEchats</div>
</template>

1.4 重置图表大小

通过给 resize 传入参数,重置图表大小。

myChart.resize({
  width: 800,
  height: 400,
});

1.5 容器节点的销毁和重建

假设页面有多个标签页,每个标签页都有图表,当切换标签页时,当前标签页的 DOM 节点被移除,再切回来时,就会发现图表"不见了"。这是因为图表的容器节点被移除导致,就算之后节点重新添加,图表所在节点也不存在了,处理方法是,在容器节点被销毁之后,调用 echartsInstance.dispose 销毁实例,在容器节点被重新添加后再次调用 echarts.init 初始化。

tips:在容器节点被销毁时,总是应调用 echartsInstance.dispose 以销毁实例释放资源,避免内存泄漏。

<script setup lang="ts">
import { onMounted, ref, onUnmounted } from "vue";
import * as echarts from "echarts";
 
let myChart = null;
const initEchart = () => {
  // 绘制图表
  myChart.setOption({
    title: {
      text: "ECharts 入门示例",
    },
    tooltip: {},
    xAxis: {
      data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
    },
    yAxis: {},
    series: [
      {
        name: "销量",
        type: "bar",
        data: [5, 20, 36, 10, 10, 20],
      },
    ],
  });
};
const resize = () => {
  myChart.resize();
};
onMounted(() => {
  myChart = echarts.init(document.getElementById("demo"));
  initEchart();
  window.addEventListener("resize", resize);
});
onUnmounted(() => {
  myChart.setOption({
    echartsInstance: {
      dispose: false,
    },
  });
  window.removeEventListener("resize", resize);
});
</script>
 
<template>
  <div id="demo" style="width: 100%; height: 400px">demoEchats</div>
</template>

2. 样式

可以通过颜色主题、调色盘、直接样式设置、视觉映射改变图形元素或文字的颜色、明暗、大小等。

2.1 颜色主题

echarts 内置了 'dark' 主题,其他主题需自己下载。

var chart = echarts.init(dom, "dark");

2.2 调色盘

调色盘,可以在 option 中设置。它给定了一组颜色,图形、系列会自动依次从其中选择颜色。可以设置全局的调色盘,也可以设置系列自己专属的调色盘。

var option = {
  // 全局调色盘。
  color: [
    "#c23531",
    "#2f4554",
    "#61a0a8",
    "#d48265",
    "#91c7ae",
    "#749f83",
    "#ca8622",
    "#bda29a",
    "#6e7074",
    "#546570",
    "#c4ccd3",
  ],
 
  series: [
    {
      type: "bar",
      // 此系列自己的调色盘。
      color: [
        "#dd6b66",
        "#759aa0",
        "#e69d87",
        "#8dc1a9",
        "#ea7e53",
        "#eedd78",
        "#73a373",
        "#73b9bc",
        "#7289ab",
        "#91ca8c",
        "#f49f42",
      ],
      // ...
    },
    {
      type: "pie",
      // 此系列自己的调色盘。
      color: [
        "#37A2DA",
        "#32C5E9",
        "#67E0E3",
        "#9FE6B8",
        "#FFDB5C",
        "#ff9f7f",
        "#fb7293",
        "#E062AE",
        "#E690D1",
        "#e7bcf3",
        "#9d96f5",
        "#8378EA",
        "#96BFFF",
      ],
      // ...
    },
  ],
};

2.3 直接样式设置

这是比较常见的设置方式,在 option 中的很多地方可以设置 itemStylelineStyleareaStylelabel 等等。这些的地方可以直接设置图形元素的颜色、线宽、点的大小、标签的文字、标签的样式等等。后续配置项有详解,在这就不多叙述了。

2.4 高亮样式 emphasis

鼠标悬浮图形元素一般会出现高亮的样式,默认情况下,高亮样式是根据普通样式自动生成的,也可以通过 emphasis 自定义高亮。

myChart.setOption({
  title: {
    text: "ECharts 入门示例",
  },
  tooltip: {},
  xAxis: {
    data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
  },
  yAxis: {},
  series: [
    {
      name: "销量",
      type: "bar",
      data: [5, 20, 36, 10, 10, 20],
      emphasis: {
        itemStyle: {
          // 高亮时点的颜色。
          color: "blue",
        },
        label: {
          show: true,
          // 高亮时标签的文字。
          formatter: "This is a emphasis label.",
        },
      },
    },
  ],
});

3. 数据集

常用 series.data 设置系列所需展示数据,但官网推荐使用数据集(dataset)来专门管理数据,因为这样数据可以被多个组件复用。

3.1 在系列中设置数据

var option = {
  xAxis: {
    type: "category",
    data: ["Matcha Latte", "Milk Tea", "Cheese Cocoa", "Walnut Brownie"],
  },
  yAxis: {},
  series: [
    {
      type: "bar",
      name: "2015",
      data: [89.3, 92.1, 94.4, 85.4],
    },
    {
      type: "bar",
      name: "2016",
      data: [95.8, 89.4, 91.2, 76.9],
    },
    {
      type: "bar",
      name: "2017",
      data: [97.7, 83.1, 92.5, 78.1],
    },
  ],
};

3.2 在数据集中设置数据

var option = {
  legend: {},
  tooltip: {},
  dataset: {
    // 提供一份数据。
    source: [
      ["product", "2015", "2016", "2017"],
      ["Matcha Latte", 43.3, 85.8, 93.7],
      ["Milk Tea", 83.1, 73.4, 55.1],
      ["Cheese Cocoa", 86.4, 65.2, 82.5],
      ["Walnut Brownie", 72.4, 53.9, 39.1],
    ],
  },
  // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。
  xAxis: { type: "category" },
  // 声明一个 Y 轴,数值轴。
  yAxis: {},
  // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。
  series: [{ type: "bar" }, { type: "bar" }, { type: "bar" }],
};

或者也可以使用常见的"对象数组"的格式

var option = {
  legend: {},
  tooltip: {},
  dataset: {
    // 用 dimensions 指定了维度的顺序。直角坐标系中,如果 X 轴 type 为 category,
    // 默认把第一个维度映射到 X 轴上,后面维度映射到 Y 轴上。
    // 如果不指定 dimensions,也可以通过指定 series.encode
    // 完成映射,参见后文。
    dimensions: ["product", "2015", "2016", "2017"],
    source: [
      { product: "Matcha Latte", 2015: 43.3, 2016: 85.8, 2017: 93.7 },
      { product: "Milk Tea", 2015: 83.1, 2016: 73.4, 2017: 55.1 },
      { product: "Cheese Cocoa", 2015: 86.4, 2016: 65.2, 2017: 82.5 },
      { product: "Walnut Brownie", 2015: 72.4, 2016: 53.9, 2017: 39.1 },
    ],
  },
  xAxis: { type: "category" },
  yAxis: {},
  series: [{ type: "bar" }, { type: "bar" }, { type: "bar" }],
};

3.3 数据集(dataset)到图形 (series) 的映射

指定数据集的列(column)或行(row)映射为系列(series)。通过 series.seriesLayoutBy 属性来配置。默认是按照列(column)来映射。

指定维度映射的规则:通过 series.encode 属性,以及 visualMap 组件来配置。默认情况下维度会自动对应到 dataset.source 中的第一列,之后三个柱图系列的数据一一对应到 dataset.source 中后面每一列。

3.4 数据集(dataset)的行列映射为系列(series)

有了数据表后,用户可以通过 series.seriesLayoutBy 配置项,改变图表对于行列的理解。series.seriesLayoutBy 可取值:

'column': 默认值。系列被安放到 dataset 的列上面。

'row': 系列被安放到 dataset 的行上面。

var option = {
  legend: {},
  tooltip: {},
  dataset: {
    source: [
      ["product", "2012", "2013", "2014", "2015"],
      ["Matcha Latte", 41.1, 30.4, 65.1, 53.3],
      ["Milk Tea", 86.5, 92.1, 85.7, 83.1],
      ["Cheese Cocoa", 24.1, 67.2, 79.5, 86.4],
    ],
  },
  xAxis: [
    { type: "category", gridIndex: 0 },
    { type: "category", gridIndex: 1 },
  ],
  yAxis: [{ gridIndex: 0 }, { gridIndex: 1 }],
  grid: [{ bottom: "55%" }, { top: "55%" }],
  series: [
    // 这几个系列会出现在第一个直角坐标系中,每个系列对应到 dataset 的每一行。
    { type: "bar", seriesLayoutBy: "row" },
    { type: "bar", seriesLayoutBy: "row" },
    { type: "bar", seriesLayoutBy: "row" },
    // 这几个系列会出现在第二个直角坐标系中,每个系列对应到 dataset 的每一列。
    { type: "bar", xAxisIndex: 1, yAxisIndex: 1 },
    { type: "bar", xAxisIndex: 1, yAxisIndex: 1 },
    { type: "bar", xAxisIndex: 1, yAxisIndex: 1 },
    { type: "bar", xAxisIndex: 1, yAxisIndex: 1 },
  ],
};

3.5 维度(dimension)

当把系列(series)对应到 “列” 时,列就称为“维度(dimension)”,行称为数据项(item)。当把系列(series)对应到 “行” 时,行就是“维度(dimension)”,列就是数据项(item)。

维度名(dimension name)可以在定义在 dataset 的第一行(列)。从第二行(列)开始,才是正式的数据。dataset.source 中第一行(列)到底包含不包含维度名,ECharts 默认会自动探测。也可以通过 dataset.sourceHeader 设置,为 true 显示声明第一行(列)就是维度,为 false 表明第一行(列)开始就直接是数据。

3.6 数据到图形的映射(series.encode)

可以使用 series.encode 来做映射。

var option = {
  dataset: {
    source: [
      ["score", "amount", "product"],
      [89.3, 58212, "Matcha Latte"],
      [57.1, 78254, "Milk Tea"],
      [74.4, 41032, "Cheese Cocoa"],
      [50.1, 12755, "Cheese Brownie"],
      [89.7, 20145, "Matcha Cocoa"],
      [68.1, 79146, "Tea"],
      [19.6, 91852, "Orange Juice"],
      [10.6, 101852, "Lemon Juice"],
      [32.7, 20112, "Walnut Brownie"],
    ],
  },
  xAxis: {},
  yAxis: { type: "category" },
  series: [
    {
      type: "bar",
      encode: {
        // 将 "amount" 列映射到 X 轴。
        x: "amount",
        // 将 "product" 列映射到 Y 轴。
        y: "product",
      },
    },
  ],
};

series.encode 声明结构如下。冒号左边可以是坐标系、标签等特定名称,如 'x', 'y', 'tooltip' 等,冒号右边是数据中的维度名(string 格式)或者维度的序号(number 格式,从 0 开始计数),可以指定一个或多个维度(使用数组)。

// 在任何坐标系和系列中,都支持:
encode: {
  // 使用 “名为 product 的维度” 和 “名为 score 的维度” 的值在 tooltip 中显示
  tooltip: ['product', 'score']
  // 使用 “维度 1” 和 “维度 3” 的维度名连起来作为系列名。(有时候名字比较长,这可以避免在 series.name 重复输入这些名字)
  seriesName: [1, 3],
  // 表示使用 “维度2” 中的值作为 id。这在使用 setOption 动态更新数据时有用处,可以使新老数据用 id 对应起来,从而能够产生合适的数据更新动画。
  itemId: 2,
  // 指定数据项的名称使用 “维度3” 在饼图等图表中有用,可以使这个名字显示在图例(legend)中。
  itemName: 3
}
 
// 直角坐标系(grid/cartesian)特有的属性:
encode: {
  // 把 “维度1”、“维度5”、“名为 score 的维度” 映射到 X 轴:
  x: [1, 5, 'score'],
  // 把“维度0”映射到 Y 轴。
  y: 0
}
 
// 单轴(singleAxis)特有的属性:
encode: {
  single: 3
}
 
// 极坐标系(polar)特有的属性:
encode: {
  radius: 3,
  angle: 2
}
 
// 地理坐标系(geo)特有的属性:
encode: {
  lng: 3,
  lat: 2
}
 
// 对于一些没有坐标系的图表,例如饼图、漏斗图等,可以是:
encode: {
  value: 3
}
3.6.1 默认的 series.encode

在坐标系中(如直角坐标系、极坐标系等):

| 有类目轴(axis.type 为 'category'),则将第一列(行)映射到这个轴上,后续每一列(行)对应一个系列。

| 如果没有类目轴,假如坐标系有两个轴(例如直角坐标系的 X Y 轴),则每两列对应一个系列,这两列分别映射到这两个轴上。

如果没有坐标系(如饼图):

| 取第一列(行)为名字,第二列(行)为数值(如果只有一列,则取第一列为数值)。

3.6.2 常见的 series.encode 设置方式
// 把第三列设置为 X 轴,第五列设置为 Y 轴
var option = {
  series: {
    // 注意维度序号(dimensionIndex)从 0 开始计数,第三列是 dimensions[2]。
    encode: { x: 2, y: 4 },
    // ...
  },
};
 
// 第三行设置为 X 轴,第五行设置为 Y 轴
var option = {
  series: {
    encode: { x: 2, y: 4 },
    seriesLayoutBy: 'row'
    // ...
  }
};
 
// 把第二列设置为标签
var option = {
  series: {
    label: {
      // `'{@score}'` 表示 “名为 score” 的维度里的值。
      // `'{@[4]}'` 表示引用序号为 4 的维度里的值。
      formatter: 'aaa{@product}bbb{@score}ccc{@[4]}ddd';
    }
  }
};
 
// 让第 2 列和第 3 列显示在提示框(tooltip)
var option = {
  series: {
    encode: {
      tooltip: [1, 2]
      // ...
    }
    // ...
  }
};
 
// 给维度取名
var option = {
  dataset: {
    dimensions: ['score', 'amount'],
    source: [
      [89.3, 3371],
      [92.1, 8123],
      [94.4, 1954],
      [85.4, 829]
    ]
  }
};
 
// 把第三列映射为气泡图的点的大小
var option = {
  dataset: {
    source: [
      [12, 323, 11.2],
      [23, 167, 8.3],
      [81, 284, 12],
      [91, 413, 4.1],
      [13, 287, 13.5]
    ]
  },
  visualMap: {
    show: false,
    dimension: 2, // 指向第三列(列序号从 0 开始记,所以设置为 2)。
    min: 2, // 需要给出数值范围,最小数值。
    max: 15, // 需要给出数值范围,最大数值。
    inRange: {
      // 气泡尺寸:5 像素到 60 像素。
      symbolSize: [5, 60]
    }
  },
  xAxis: {},
  yAxis: {},
  series: {
    type: 'scatter'
  }
};

3.7 数据的各种格式

除了二维数组还可以是 key-value 格式

dataset: [
  {
    // 按行的 key-value 形式(对象数组),这是个比较常见的格式。
    source: [
      { product: "Matcha Latte", count: 823, score: 95.8 },
      { product: "Milk Tea", count: 235, score: 81.4 },
      { product: "Cheese Cocoa", count: 1042, score: 91.2 },
      { product: "Walnut Brownie", count: 988, score: 76.9 },
    ],
  },
  {
    // 按列的 key-value 形式。
    source: {
      product: ["Matcha Latte", "Milk Tea", "Cheese Cocoa", "Walnut Brownie"],
      count: [823, 235, 1042, 988],
      score: [95.8, 81.4, 91.2, 76.9],
    },
  },
];

3.8 多个 dataset 以及如何引用他们

可以同时定义多个 dataset。系列可以通过 series.datasetIndex 来指定引用哪个 dataset。

var option = {
  dataset: [
    {
      // 序号为 0 的 dataset。
      source: [],
    },
    {
      // 序号为 1 的 dataset。
      source: [],
    },
    {
      // 序号为 2 的 dataset。
      source: [],
    },
  ],
  series: [
    {
      // 使用序号为 2 的 dataset。
      datasetIndex: 2,
    },
    {
      // 使用序号为 1 的 dataset。
      datasetIndex: 1,
    },
  ],
};

echarts 基础入门(下)https://developer.aliyun.com/article/1513297?spm=a2c6h.13148508.setting.33.f8774f0euyBLtl

目录
相关文章
|
1月前
|
数据可视化 JavaScript 搜索推荐
ECharts入门了解及使用
ECharts入门了解及使用
33 0
|
1月前
|
JavaScript 定位技术
echarts 基础入门(下)
echarts 基础入门(下)
29 0
|
1月前
|
JavaScript
vue2_echarts安装使用_入门
vue2_echarts安装使用_入门
12 1
|
1月前
|
资源调度 数据可视化 JavaScript
完全入门ECharts:在UniApp中快速实现数据可视化
在开发过程中,我们经常需要使用到数据可视化工具来展示数据,而 ECharts 是一款非常流行的数据可视化工具,它可以帮助我们快速地创建所需的图表。在这篇博客中,我们将介绍如何在 Uniapp 中使用
568 0
|
6月前
|
容器
Echarts 创建饼状图-入门实例
Echarts 创建饼状图-入门实例
|
7月前
|
JavaScript 前端开发 CDN
echarts入门
echarts入门
35 0
|
8月前
|
JavaScript 前端开发 Apache
02Echarts -入门例子
02Echarts -入门例子
17 0
|
9月前
|
JavaScript
echarts入门】:vue项目中应用echarts
echarts在vue项目中快速上手
|
11月前
|
关系型数据库 MySQL BI
MySQL实战基础知识入门(11):简单高效的筛选最近7日每天数据统计的方式解决echarts每日交易量柱图
MySQL实战基础知识入门(11):简单高效的筛选最近7日每天数据统计的方式解决echarts每日交易量柱图
150 0
|
11月前
|
Web App开发 移动开发 数据可视化
学习echarts入门
学习echarts入门
108 0