Echarts
扩展站点好用极了
Echarts 介绍
Echarts 是一个基于 JavaScript 的开源可视化库,它提供了许多强大的图表和数据可视化组件,可以帮助您轻松地创建交互式的数据可视化。在本篇回答中,我将为您精细介绍 ECharts 的基本概念、使用方法和常见图表类型。
实例化
要使用 ECharts,您需要先创建一个 ECharts 实例。可以使用以下代码创建一个简单的 ECharts 实例:
// 引入 ECharts
import echarts from "echarts";
// 初始化 ECharts 实例
const myChart = echarts.init(document.getElementById("myChart"));在上面的代码中,我们首先使用 import 语句引入了 ECharts,然后使用 echarts.init 方法创建了一个 ECharts 实例,并将其绑定到一个 HTML 元素上。
配置项
在创建 ECharts 实例后,您需要使用配置项来指定图表的类型、数据和样式等信息。ECharts 的配置项是一个 JavaScript 对象,其中包含了许多属性和方法,用于定义图表的各个组件、样式和数据等。
以下是一个简单的 ECharts 配置项示例:
const option = {
title: {
text: "某站点用户访问来源",
subtext: "纯属虚构",
left: "center",
},
tooltip: {
trigger: "item",
formatter: "{a} <br/>{b}: {c} ({d}%)",
},
legend: {
orient: "vertical",
left: 10,
data: ["直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎"],
},
series: [
{
name: "访问来源",
type: "pie",
radius: ["50%", "70%"],
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
},
emphasis: {
label: {
show: true,
fontSize: "30",
fontWeight: "bold",
},
},
labelLine: {
show: false,
},
data: [
{ value: 335, name: "直接访问" },
{ value: 310, name: "邮件营销" },
{ value: 234, name: "联盟广告" },
{ value: 135, name: "视频广告" },
{ value: 1548, name: "搜索引擎" },
],
},
],
};
// 使用配置项初始化图表
myChart.setOption(option);在上面的代码中,我们创建了一个饼图,并使用配置项定义了图表的标题、提示框、图例、系列数据等信息。最后,我们使用 myChart.setOption 方法将配置项应用到图表中。
数据格式
在 ECharts 中,数据格式是非常重要的。ECharts 支持多种数据格式,包括数组、对象和 JSON 等。以下是一个简单的数据格式示例:
const data = [
{ name: "直接访问", value: 335 },
{ name: "邮件营销", value: 310 },
{ name: "联盟广告", value: 234 },
{ name: "视频广告", value: 135 },
{ name: "搜索引擎", value: 1548 },
];在上面的代码中,我们使用一个包含多个对象的数组来表示数据。每个对象都包含了一个 name 属性和一个 value 属性,分别表示数据的名称和值。
常见图表类型
ECharts 提供了多种图表类型,包括折线图、柱状图、饼图、散点图、雷达图、地图等。以下是一些常见的图表类型及其示例代码:
折线图
const option = {
xAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
},
yAxis: {
type: "value",
},
series: [
{
data: [820, 932, 901, 934, 1290, 1330, 1320],
type: "line",
},
],
};柱状图
const option = {
xAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
},
yAxis: {
type: "value",
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: "bar",
},
],
};饼图
const option = {
series: [
{
name: "访问来源",
type: "pie",
radius: "50%",
data: [
{ value: 335, name: "直接访问" },
{ value: 310, name: "邮件营销" },
{ value: 234, name: "联盟广告" },
{ value: 135, name: "视频广告" },
{ value: 1548, name: "搜索引擎" },
],
},
],
};散点图
const option = {
xAxis: {
type: "value",
},
yAxis: {
type: "value",
},
series: [
{
data: [
[10.0, 8.04],
[8.0, 6.95],
[13.0, 7.58],
[9.0, 8.81],
[11.0, 8.33],
[14.0, 9.96],
[6.0, 7.24],
[4.0, 4.26],
[12.0, 10.84],
[7.0, 4.82],
[5.0, 5.68],
],
type: "scatter",
},
],
};雷达图
const option = {
radar: {
indicator: [
{ name: "销售", max: 6500 },
{ name: "管理", max: 16000 },
{ name: "信息技术", max: 30000 },
{ name: "客服", max: 38000 },
{ name: "研发", max: 52000 },
{ name: "市场", max: 25000 },
],
},
series: [
{
name: "预算 vs 开销",
type: "radar",
data: [
{
value: [4300, 10000, 28000, 35000, 50000, 19000],
name: "预算",
},
{
value: [5000, 14000, 28000, 31000, 42000, 21000],
name: "开销",
},
],
},
],
};地图
const option = {
tooltip: {
trigger: "item",
formatter: "{b}<br/>{c} (p / km²)",
},
visualMap: {
min: 800,
max: 50000,
text: ["High", "Low"],
realtime: false,
calculable: true,
inRange: {
color: ["lightskyblue", "yellow", "orangered"],
},
},
series: [
{
name: "中国",
type: "map",
mapType: "china",
label: {
show: true,
},
data: [
{ name: "北京", value: 20057.34 },
{ name: "天津", value: 15477.48 },
{ name: "上海", value: 19150.76 },
{ name: "重庆", value: 31446.33 },
{ name: "河北", value: 17140.51 },
{ name: "河南", value: 16038.15 },
{ name: "云南", value: 12559.04 },
],
},
],
};VueEcharts 组件
属性
| props | decsription | type | default |
|---|---|---|---|
| height | 最外层高度 | string|Number | 100% |
| width | 最外层宽度 | String |Number | 100% |
| options | 等同于 echarts 的 options | Object | {} |
| id | 当前 echarts div 的 id | String | '' |
| headerbackground | 组件上方的自定义 title 样式 | String | ‘’ |
| headerTitle | 取自 options.name | String |
具体实现代码
<script setup >
import { nextTick, onMounted, ref, watch, watchEffect, onBeforeUnmount } from "vue"
import { markRaw } from 'vue'
import * as echarts from 'echarts';
const props = defineProps({
height: {
type: [String, Number],
default: '500px'
},
width: {
type: [String, Number],
default: '100%'
},
options: {
type: Object,
default: {}
},
id: {
type: String,
default: ''
}
})
const echartsDom = ref(null)
const chartInit = ref(null)
let echartsLister = null
onMounted(() => {
nextTick(() => {
echartsDom.value = document.getElementById(props.id)
chartInit.value = markRaw(echarts.init(echartsDom.value));
echartsLister = () => { chartInit.value.resize() }
window.addEventListener("resize", echartsLister);
chartInit.value.setOption(props.options, true)
// console.log(chartInit.value.getDataURL());
})
})
watch(() => props.options, () => {
if (chartInit.value) {
chartInit.value.setOption(props.options, true)
}
},
{ deep: true }
)
// 销毁resize事件
onBeforeUnmount(() => {
echartsLister && window.removeEventListener('resize', echartsLister)
})
</script>
<template>
<div class="echart_ctn" :style="{ height: props.height, width: props.width }">
<div class="title" :style="headerStyle" v-if="props.options.name">
{{ props.options.name }}
</div>
<div :id="props.id" :ref="props.id + 'Dom'" class="echart_view"></div>
</div>
</template>
<style scoped lang="scss">
.echart_ctn {
display: flex;
flex-direction: column;
.title {
box-sizing: border-box;
padding: 1% 0;
width: 70%;
text-align: center;
font-size: 18.792px;
font-family: "Microsoft YaHei";
background-size: 100% 100%;
background-repeat: no-repeat;
margin: auto;
&::before,
&::after {
content: '';
display: inline-block;
width: 8px;
height: 8px;
background-color: blueviolet;
border: 1px solid #000;
border-radius: 50%;
transform: translateY(-50%);
filter: brightness(120%);
}
&::before {
margin-right: 5px;
}
&::after {
margin-left: 5px;
}
}
.echart_view {
flex: 1;
}
}
</style>结语
以上是 ECharts 的基本概念、使用方法和常见图表类型的介绍。ECharts 是一款非常强大的数据可视化工具,可以帮助您轻松地创建交互式的数据可视化。如果您对 ECharts 感兴趣,可以访问官方网站(https://echarts.apache.org/)了解更多信息。