数据可视化-Echarts5
1.ECharts 初体验
div容器必须要有高度,宽度可选
html
<div id="main" style="height: 400px"></div>
<script src="../libs/echarts-5.3.3.js"></script>
<script>
// 1.基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById("main"));
// 2.指定图表的配置项和数据
var option = {
title: {
text: "ECharts 入门示例",
},
tooltip: {},
legend: {
data: ["销量"],
},
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
},
yAxis: {},
series: [
{
name: "销量",
type: "bar",
data: [5, 20, 36, 10, 10, 20],
},
],
};
// 3.使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>最精简 配置版
js
var option = {
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
},
yAxis: {},
series: [
{
name: "销量",
type: "bar",
data: [5, 20, 36, 10, 10, 20],
},
],
};2.切换渲染引擎 和 主题色
js
echarts.init(document.getElementById("main"), null, {renderer: "svg"});
echarts.init(document.getElementById("main"), "dark", {renderer: "svg"});3.配置项(组件)
1.Grid 组件
json
{
"backgroundColor": "rgba(255, 0, 0, 0.1)",
"grid": {
"show": true,
"backgroundColor": "rgba(255, 0, 0, 0.1)",
"left": 0,
"right": 0,
"top": 0,
"bottom": 0,
"containLabel": true
}
}2.x,y坐标系 组件
js
xAxis: {
show: true,
name: "类目坐标",
type: "category", // 类目坐标才有data选项
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
axisLine: { // 坐标轴轴线相关设置。
show: true,
lineStyle: {
color: "red",
width: 3,
},
},
axisLabel: { // 坐标轴刻度标签的相关设置。
show: true,
color: "green",
fontSize: 16,
},
axisTick: { // 坐标轴刻度相关设置。
show: true,
length: 10,
lineStyle: {
color: "blue",
width: 3,
},
},
splitLine: { // 坐标轴在 grid 区域中的分隔线。
show: true,
lineStyle: {
color: "orange",
width: 1,
},
},
},3.series 系列
1.data 支持的编写方式
js
series: [
{
name: "产品销量柱形图",
type: "bar",
label: {
show: true,
},
data: [
{
value: 5,
name: "衬衫",
},
{
value: 20,
name: "羊毛衫",
},
{
value: 36,
name: "雪纺衫",
},
{
value: 10,
name: "裤子",
},
{
value: 10,
name: "高跟鞋",
},
{
value: 20,
name: "袜子",
},
],
},
],2.type 图表类型(bar、pie)
折线图 和 条型图
js
series: [
{
name: "产品销量柱形图", // 数据系列的名称
type: "line", // 数据系列的类型,是折线图
data: [5, 20, 36, 10, 10, 20], // 数据数组,每个元素代表一个数据点的值
},
],饼图
js
series: [
{
name: "产品销量柱形图", // 数据系列的名称
type: "pie", // 数据系列的类型,是饼图
center: ["50%", "50%"], // 饼图的中心(圆心)坐标。这里是图表的正中间位置
// 第一个值为横坐标相对于容器宽度的百分比,第二个值为纵坐标相对于容器高度的百分比
radius: ["20%", "85%"], // 饼图的半径。第一个值是内半径,第二个值是外半径
// 这里的百分比是相对于容器高宽中较小的一项
roseType: "area", // 玫瑰图模式,使用面积模式,通过半径展现数据大小
data: [ // 数据数组,每个对象代表一个数据项
{
value: 5,
name: "衬衫", // 数据项名称
},
{
value: 20,
name: "羊毛衫",
},
{
value: 36,
name: "雪纺衫",
},
{
value: 10,
name: "裤子",
},
{
value: 10,
name: "高跟鞋",
},
{
value: 20,
name: "袜子",
},
],
},
],3.label( 优先级 )
js
series: [
{
name: "产品销量柱形图", // 数据系列的名称
type: "bar", // 数据系列的类型,是柱状图
label: { // 系列图形上的文本标签
show: true, // 显示标签
position: [10, 10], // 标签的位置,可以是数组或者字符串,具体取决于图表类型和需求
color: "white", // 标签文字的颜色
fontSize: "20px", // 标签文字的字体大小
},
data: [ // 数据数组
{
value: 5, // 数据值
label: { // 单个数据项的文本标签
show: false, // 不显示标签,该设置优先级高于系列的设置
},
},
// 其他数据项...
],
},
],4.itemStyle 图形默认色
js
series: [
{
name: "产品销量柱形图", // 数据系列的名称
type: "bar", // 数据系列的类型,是柱状图
itemStyle: { // 整个系列的图形样式
color: "red", // 柱的颜色
// borderColor: "orange", // 柱的边框颜色
// borderWidth: 4, // 柱的边框宽度
// opacity: 0.4, // 柱的透明度
},
data: [ // 数据数组
{
value: 5, // 数据值
itemStyle: { // 单个数据项的图形样式
color: "green", // 单个数据项的颜色,优先级高于系列的样式
},
},
// 其他数据项...
],
},
],5.emphasis 高亮色
鼠标悬浮到图形元素上时,高亮的样式。
js
series: [
{
name: "产品销量柱形图", // 数据系列的名称
type: "bar", // 数据系列的类型,这里是柱状图
emphasis: { // 图形高亮的配置
label: { // 高亮时的标签配置
// show: false, // 可以控制高亮标签的显示与隐藏
color: "gold", // 高亮时标签的颜色
},
},
data: [ // 数据数组
{
value: 5, // 数据值
emphasis: { // 单个数据项的高亮配置
label: {
// show: false, // 单个数据项高亮标签的显示与隐藏
color: "green", // 单个数据项高亮时标签的颜色
},
},
},
// 其他数据项...
],
},
],4.title 组件
js
title: {
text: "Echart 5.x 条形图", // 图表的标题文本
left: 20, // 标题组件相对于容器左侧的偏移像素
top: 10, // 标题组件相对于容器顶部的偏移像素
},5.legend 图例组件
pie
js
legend: {
show: true, // 是否显示图例组件
// width: 50, // 图例组件的宽度,默认自适应
itemWidth: 20, // 图例标记的图形宽度
// icon: "circle", // 图例项的图形标记类型
// top: 10, // 图例组件离容器顶部的距离
// bottom: 0, // 图例组件离容器底部的距离
formatter: function (name) {
return name + " {countSty|40%}"; // 使用富文本语法来格式化图例项的文本
},
textStyle: {
color: "red", // 图例文本的颜色
rich: { // 用于自定义富文本样式
countSty: {
color: "red", // 自定义样式 countSty 的颜色
},
},
},
},6.tooltip 组件
js
tooltip: {
show: true, // 是否显示提示框组件
trigger: "axis", // 触发类型,'axis' 表示提示框会随着轴线触发,通常用于折线图、柱状图等
axisPointer: {
type: "line", // 指示器类型,默认为 'line'
// 可选值还有 'shadow'、'cross',其中:
// 'line' 表示线条
// 'shadow' 表示阴影区域
// 'cross' 表示十字准星
},
},7.Color的渐变色
对象配置方式( 推荐 )
js
color: {
type: "linear", // 线性渐变
x: 0, // 起始点的 x 坐标
y: 0, // 起始点的 y 坐标
x2: 0, // 终止点的 x 坐标
y2: 1, // 终止点的 y 坐标
colorStops: [
{
offset: 0, // 渐变起始位置
color: "red", // 起始颜色
},
{
offset: 1, // 渐变结束位置
color: "blue", // 结束颜色
},
],
}调用 API 生成
js
color: new echarts.graphic.LinearGradient(
0, // x0: 起始点的 x 坐标
0, // y0: 起始点的 y 坐标
0, // x1: 终止点的 x 坐标
1, // y1: 终止点的 y 坐标
[
{
offset: 0, // 颜色渐变的起始点
color: "#20FF89", // 在起始点的颜色
},
{
offset: 1, // 颜色渐变的终止点
color: "rgba(255, 255, 255, 0)", // 在终止点的颜色(透明)
},
],
false // 是否全局坐标,默认为 false
),4.图表实战
1.柱形图
js
var option = {
backgroundColor: "rgb(40,46,72)", // 修正为 "rgb"
grid: {
left: "5%",
right: "6%",
top: "30%",
bottom: "5%",
containLabel: true, // grid 区域是否包含坐标轴的刻度标签
},
tooltip: {}, // 默认启用的提示框组件
xAxis: {
name: "月份",
axisLine: {
show: true,
lineStyle: {
color: "#42A4FF",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "white",
},
data: ["一月", "二月", "三月", "四月", "五月", "六月", "七月"],
},
yAxis: {
name: "个",
nameTextStyle: {
color: "white",
fontSize: 13,
},
axisLine: {
show: true,
lineStyle: {
color: "#42A4FF",
},
},
axisTick: {
show: false,
},
splitLine: {
show: true,
lineStyle: {
color: "#42A4FF",
},
},
axisLabel: {
color: "white",
},
},
series: [
{
name: "销量",
type: "bar",
barWidth: 17,
itemStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{ offset: 0, color: "#01B1FF" }, // 0% 处的颜色
{ offset: 1, color: "#033BFF" }, // 100% 处的颜色
],
global: false, // 缺省为 false
},
},
data: [500, 2000, 3600, 1000, 1000, 2000, 4000],
},
],
};2.折线图
js
var option = {
backgroundColor: "rgb(40,46,72)", // 请注意此处原始代码有拼写错误,应该是 "rgb" 而不是 "rbg"
grid: {
left: "5%",
right: "1%",
top: "20%",
bottom: "15%",
containLabel: true, // grid 区域是否包含坐标轴的刻度标签
},
legend: {
bottom: "5%",
itemGap: 20,
itemWidth: 13,
itemHeigth: 12,
textStyle: {
color: "#64BCFF",
},
icon: "rect",
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "line",
lineStyle: {
color: "#20FF89",
},
},
},
xAxis: [
{
type: "category",
axisLine: {
show: false,
},
axisLabel: {
color: "#64BCFF",
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
data: [
"1月", "2月", "3月", "4月", "5月", "6月",
"7月", "8月", "9月", "10月", "11月", "12月"
],
},
],
yAxis: [
{
type: "value",
splitLine: {
show: false,
},
axisLine: {
show: false,
},
axisLabel: {
show: true,
color: "#64BCFF",
},
},
],
series: [
{
name: "正常",
type: "line",
smooth: true, // 是否平滑曲线显示。
symbolSize: 5, // 标记的大小
showSymbol: false,
itemStyle: {
color: "#20FF89",
},
areaStyle: {
color: new echarts.graphic.LinearGradient(
0, 0, 0, 1,
[
{ offset: 0, color: "#20FF89" },
{ offset: 1, color: "rgba(255, 255, 255, 0)" }
],
false
),
},
data: [200, 200, 191, 234, 290, 330, 310, 201, 154, 190, 330, 410],
},
{
name: "异常",
type: "line",
smooth: true,
symbolSize: 5,
showSymbol: false,
itemStyle: {
color: "#EA9502",
},
areaStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{ offset: 0, color: "#EA9502" },
{ offset: 1, color: "rgba(255, 255, 255, 0)" }
],
},
},
data: [500, 300, 202, 258, 280, 660, 320, 202, 308, 280, 660, 420],
},
],
};3.饼图
js
// =====准备数据=====
let pieDatas = [
{ value: 100, name: "广州占比", percentage: "5%", color: "#34D160" },
{ value: 200, name: "深圳占比", percentage: "4%", color: "#027FF2" },
{ value: 300, name: "东莞占比", percentage: "8%", color: "#8A00E1" },
{ value: 400, name: "佛山占比", percentage: "10%", color: "#F19610" },
{ value: 500, name: "中山占比", percentage: "20%", color: "#6054FF" },
{ value: 600, name: "珠海占比", percentage: "40%", color: "#00C6FF" },
];
// 将 pieDatas 格式的 数据映射为 系列图所需要的数据格式
var data = pieDatas.map((item) => {
return {
value: item.value,
name: item.name,
itemStyle: {
color: item.color,
},
};
});
// 求出总数
let total = pieDatas.reduce((a, b) => {
return a + b.value * 1;
}, 0);
// =====指定图表的配置项和数据=====
var option = {
backgroundColor: "rgb(40,46,72)",
title: {
text: `充电桩总数`,
top: "50%",
left: "50%",
padding: [-20, 0, 0, -45],
textStyle: {
fontSize: 19,
color: "white",
},
subtext: `{totalSty|${total}}`,
subtextStyle: {
rich: {
totalSty: {
fontSize: 19,
color: "white",
width: 90,
align: "center",
},
},
},
},
legend: {
orient: "vertical",
right: "10%",
top: "18%",
itemGap: 20,
itemWidth: 16,
itemHeigth: 16,
icon: "rect",
formatter: function (name) {
var currentItem = pieDatas.find((item) => item.name === name);
return (
"{nameSty|" +
currentItem.name +
"}\n" +
"{numberSty|" +
currentItem.value +
"个 }" +
"{preSty|" +
currentItem.percentage +
"}"
);
},
textStyle: {
rich: {
nameSty: {
fontSize: 12,
color: "#FFFFFF",
padding: [10, 14],
},
numberSty: {
fontSize: 12,
color: "#40E6ff",
padding: [0, 0, 0, 14],
},
preSty: {
fontSize: 12,
color: "#40E6ff",
},
},
},
},
series: [
{
type: "pie",
center: ["50%", "50%"],
radius: ["30%", "75%"],
label: {
show: false,
},
data: data,
roseType: "area",
},
],
};4.地图
1.geo 地理坐标系组件
1.引入 geo_json
2.注册需要的地图 GeoJSON (在调 setOption 之前注册即可)
3.配置显示地图
html
<!-- 引入 ECharts 和 GeoJSON 数据 -->
<script src="../libs/echarts-5.3.3.js"></script>
<script src="./geojson/china_json.js"></script>
<script src="./geojson/gd_geojson.js"></script>
<script src="./geojson/南昌.js"></script>
<script>
// 注册地图
echarts.registerMap("cn", { geoJSON: china_json });
echarts.registerMap("gd", { geoJSON: gd_geojson });
// 初始化图表
var myChart = echarts.init(document.getElementById("main"), null, {
renderer: "svg",
});
// 配置选项
var option = {
backgroundColor: "rgba(40,46,72, 0.2)",
grid: {
show: true,
backgroundColor: "rgba(0, 0, 255, 0.2)",
},
geo: [
{
map: "南昌", // 可以切换为 "cn" 或 "gd",取决于需要显示的地图
},
],
// series: [], // 此处可添加数据系列配置
};
// 设置选项
myChart.setOption(option);
</script>2.map series
1.引入 geo_json
2.注册需要的地图 GeoJSON (支持注册多个,也需要引入多个)
3.配置显示地图
js
var option = {
geo: {
map: "cn", // 地图类型:cn、gd、南昌
roam: false, // 是否开启鼠标缩放和平移漫游。默认不开启。
label: {
// 图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
show: false,
},
aspectScale: 0.75, // 这个参数用于 scale 地图的长宽比,如果设置了 projection 则无效。
// =======地图着色=========
itemStyle: {
areaColor: "#023677", // 地图区域的颜色。
borderColor: "#1180c7", // 图形的描边颜色。
},
emphasis: {
itemStyle: {
areaColor: "#4499d0",
},
label: {
color: "white",
},
},
// =======地图着色=========
},
series: [],
};3.itemStyle着色
areaColor
borderColor
js
var option = {
geo: {
map: "cn", // 地图类型:cn、gd、南昌
roam: false, // 是否开启鼠标缩放和平移漫游。默认不开启。
label: {
// 图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
show: false,
},
aspectScale: 0.75, // 这个参数用于 scale 地图的长宽比,如果设置了 projection 则无效。
// =======地图着色=========
itemStyle: {
areaColor: "#023677", // 地图区域的颜色。
borderColor: "#1180c7", // 图形的描边颜色。
},
emphasis: {
itemStyle: {
areaColor: "#4499d0",
},
label: {
color: "white",
},
},
// =======地图着色=========
},
series: [],
};4.map data
js
var data = [
{ name: "北京", value: 199 },
{ name: "天津", value: 42 },
{ name: "河北", value: 102 },
{ name: "山西", value: 81 },
{ name: "内蒙古", value: 47 },
{ name: "辽宁", value: 67 },
{ name: "吉林", value: 82 },
{ name: "黑龙江", value: 123 },
{ name: "上海", value: 24 },
{ name: "江苏", value: 92 },
{ name: "浙江", value: 114 },
{ name: "安徽", value: 109 },
{ name: "福建", value: 116 },
{ name: "江西", value: 91 },
{ name: "山东", value: 119 },
{ name: "河南", value: 137 },
{ name: "湖北", value: 116 },
{ name: "湖南", value: 114 },
{ name: "重庆", value: 91 },
{ name: "四川", value: 125 },
{ name: "贵州", value: 62 },
{ name: "云南", value: 83 },
{ name: "西藏", value: 9 },
{ name: "陕西", value: 80 },
{ name: "甘肃", value: 56 },
{ name: "青海", value: 10 },
{ name: "宁夏", value: 18 },
{ name: "新疆", value: 180 },
{ name: "广东", value: 123 },
{ name: "广西", value: 59 },
{ name: "海南", value: 14 },
];
var series = [
{
name: "cn地图",
type: "map",
map: "cn",
// =====地图着色======
itemStyle: {
areaColor: "#023677",
borderColor: "#1180c7",
},
emphasis: {
itemStyle: { areaColor: "#4499d0" },
label: { color: "white" },
},
select: {
label: { color: "white" },
itemStyle: { areaColor: "#4499d0" },
},
// =====地图着色======
// ===== 添加数据(不需要地理坐标点,直接使用name) =====
data: data
},
];5.visualmap
seriesIndex: [0]
inRange 指定选中范围的视觉元素样式
js
var option = {
// 1.视觉数据映射
visualMap: [
{
// type: "continuous", // 连续型视觉映射组件 (默认)
// type: "piecewise", // 分段型视觉映射组件
left: "20%",
seriesIndex: [0], // 指定取哪个系列的数据
// 定义 在选中范围中 的视觉元素, 对象类型。
inRange: {
color: ["#04387b", "#467bc0"], // 映射组件和地图的颜色(一般和地图色相近)
},
},
],
};5.散点图
1.地图上散点图的基本用法
1.配置地理坐标系组件( 在 geo 配置)
2.散点图系列
3.散点图复用地图坐标系组件 ( geoIndex )
js
var data = [
{ name: "北京", value: 199 },
{ name: "天津", value: 42 },
{ name: "河北", value: 102 },
{ name: "山西", value: 81 },
{ name: "内蒙古", value: 47 },
{ name: "辽宁", value: 67 },
{ name: "吉林", value: 82 },
{ name: "黑龙江", value: 123 },
{ name: "上海", value: 154 },
{ name: "江苏", value: 102 },
{ name: "浙江", value: 114 },
{ name: "安徽", value: 109 },
{ name: "福建", value: 116 },
{ name: "江西", value: 91 },
{ name: "山东", value: 119 },
{ name: "河南", value: 137 },
{ name: "湖北", value: 116 },
{ name: "湖南", value: 114 },
{ name: "重庆", value: 101 },
{ name: "四川", value: 125 },
{ name: "贵州", value: 62 },
{ name: "云南", value: 83 },
{ name: "西藏", value: 9 },
{ name: "陕西", value: 80 },
{ name: "甘肃", value: 56 },
{ name: "青海", value: 10 },
{ name: "宁夏", value: 18 },
{ name: "新疆", value: 120 },
{ name: "广东", value: 193 },
{ name: "广西", value: 59 },
{ name: "海南", value: 14 },
];
var option = {
tooltip: {}, // 提示框组件
geo: {
map: "cn", // 地理坐标系
},
series: [
// 地图上的数据
{
name: "cn地图",
type: "map",
map: "cn",
data: data,
itemStyle: {
areaColor: "#023677",
borderColor: "#1180c7",
},
emphasis: {
itemStyle: {
areaColor: "#4499d0",
},
label: {
color: "white",
},
},
select: {
label: {
color: "white",
},
itemStyle: {
areaColor: "#4499d0",
},
},
},
// 散点图,复用地理坐标系
{
name: "散点图充电桩",
type: "effectScatter",
geoIndex: 0, // geo 支持数组
coordinateSystem: "geo", // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件。
data: [
{
name: "广东",
value: [113.280637, 23.125178, 193],
},
{
name: "北京",
value: [116.405285, 39.904989, 199],
},
],
symbolSize: function (val) {
return val[2] / 10;
},
itemStyle: {
color: "yellow",
shadowBlur: 10,
shadowColor: "yellow",
},
},
],
};2.地图散点图+地图的数据
js
var data = [
{ name: "北京", value: 199 },
{ name: "天津", value: 42 },
{ name: "河北", value: 102 },
{ name: "山西", value: 81 },
{ name: "内蒙古", value: 47 },
{ name: "辽宁", value: 67 },
{ name: "吉林", value: 82 },
{ name: "黑龙江", value: 123 },
{ name: "上海", value: 154 },
{ name: "江苏", value: 102 },
{ name: "浙江", value: 114 },
{ name: "安徽", value: 109 },
{ name: "福建", value: 116 },
{ name: "江西", value: 91 },
{ name: "山东", value: 119 },
{ name: "河南", value: 137 },
{ name: "湖北", value: 116 },
{ name: "湖南", value: 114 },
{ name: "重庆", value: 101 },
{ name: "四川", value: 125 },
{ name: "贵州", value: 62 },
{ name: "云南", value: 83 },
{ name: "西藏", value: 9 },
{ name: "陕西", value: 80 },
{ name: "甘肃", value: 56 },
{ name: "青海", value: 10 },
{ name: "宁夏", value: 18 },
{ name: "新疆", value: 120 },
{ name: "广东", value: 193 },
{ name: "广西", value: 59 },
{ name: "海南", value: 14 },
];
var option = {
tooltip: {}, // 提示框组件
geo: {
map: "cn", // 地理坐标系
},
series: [
// 地图上的数据
{
name: "cn地图",
type: "map",
map: "cn",
data: data,
itemStyle: {
areaColor: "#023677",
borderColor: "#1180c7",
},
emphasis: {
itemStyle: {
areaColor: "#4499d0",
},
label: {
color: "white",
},
},
select: {
label: {
color: "white",
},
itemStyle: {
areaColor: "#4499d0",
},
},
},
// 散点图,复用地理坐标系
{
name: "散点图充电桩",
type: "effectScatter",
geoIndex: 0, // geo 支持数组
coordinateSystem: "geo", // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件。
data: [
{
name: "广东",
value: [113.280637, 23.125178, 193],
},
{
name: "北京",
value: [116.405285, 39.904989, 199],
},
],
symbolSize: function (val) {
return val[2] / 10;
},
itemStyle: {
color: "yellow",
shadowBlur: 10,
shadowColor: "yellow",
},
},
],
};3.地图+散点图最终的案例
js
var mapName = "cn";
var data = [
{ name: "北京", value: 199 },
{ name: "天津", value: 42 },
{ name: "河北", value: 102 },
{ name: "山西", value: 81 },
{ name: "内蒙古", value: 47 },
{ name: "辽宁", value: 67 },
{ name: "吉林", value: 82 },
{ name: "黑龙江", value: 123 },
{ name: "上海", value: 154 },
{ name: "江苏", value: 102 },
{ name: "浙江", value: 114 },
{ name: "安徽", value: 109 },
{ name: "福建", value: 116 },
{ name: "江西", value: 91 },
{ name: "山东", value: 119 },
{ name: "河南", value: 137 },
{ name: "湖北", value: 116 },
{ name: "湖南", value: 114 },
{ name: "重庆", value: 101 },
{ name: "四川", value: 125 },
{ name: "贵州", value: 62 },
{ name: "云南", value: 83 },
{ name: "西藏", value: 9 },
{ name: "陕西", value: 80 },
{ name: "甘肃", value: 56 },
{ name: "青海", value: 10 },
{ name: "宁夏", value: 18 },
{ name: "新疆", value: 120 },
{ name: "广东", value: 193 },
{ name: "广西", value: 59 },
{ name: "海南", value: 14 }
];
var geoCoordMap = {};
/* 获取地图数据 */
myChart.showLoading();
var mapFeatures = echarts.getMap(mapName).geoJson.features;
mapFeatures.forEach(function (v) {
// 地区名称
var name = v.properties.name;
// 地区经纬度
geoCoordMap[name] = v.properties.cp;
});
myChart.hideLoading();
console.log("data=>", data);
console.log("geoCoordMap=>", geoCoordMap);
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: [...geoCoord, data[i].value],
});
}
}
console.log("res=>", res);
return res;
};
// 指定图表的配置项和数据
var option = {
tooltip: {},
visualMap: {
left: "20%",
seriesIndex: [0],
inRange: {
color: ["#04387b", "#467bc0"] // 蓝绿
}
},
geo: {
map: "cn",
roam: false,
label: { show: false },
aspectScale: 0.75,
itemStyle: {
areaColor: "#023677",
borderColor: "#1180c7"
},
emphasis: {
itemStyle: { areaColor: "#4499d0" },
label: { color: "white" }
}
},
series: [
{
name: "cn地图",
type: "map",
map: "cn",
data,
itemStyle: {
areaColor: "#023677",
borderColor: "#1180c7"
},
emphasis: {
itemStyle: { areaColor: "#4499d0" },
label: { color: "white" }
},
select: {
label: { color: "white" },
itemStyle: { areaColor: "#4499d0" }
}
},
{
name: "散点图充电桩",
type: "effectScatter",
geoIndex: 0,
coordinateSystem: "geo",
data: convertData(data),
symbolSize: function (val) {
return val[2] / 10;
},
itemStyle: {
color: "yellow",
shadowBlur: 10,
shadowColor: "yellow"
},
tooltip: {
show: true,
trigger: "item",
formatter: function (params) {
console.log(params);
var data = params.data;
return `${params.seriesName} <div style="margin:5px 0px;"/> ${data.name} ${data.value[2]}`;
}
}
}
]
};5.ECharts API
1.响应式图表
js
// 响应式图表
window.addEventListener("resize", function () {
console.log("resize");
myChart.resize(); // 可以接收一个对象,传递修改后的宽和高
// myChart.resize({ height: "600px" });
});2.自动轮播提示框
js
// 自动轮播图 bar
setInterval(function () {
autoToolTip();
}, 1000);
let index = 0; // 0-5
function autoToolTip() {
index++;
if (index > 5) {
index = 0;
}
// 显示提示框
myChart.dispatchAction({
type: "showTip", // 触发的 action type
seriesIndex: 0, // 系列的索引
dataIndex: index, // 数据项的索引
position: "top" // 提示框位置
});
}3.图表点击事件(地图下钻)
js
// 监听鼠标点击事件
myChart.on("click", function (event) {
console.log(event);
if (event.name === "广东") {
option.geo.map = "gd";
myChart.setOption(option);
}
});