当前位置:   article > 正文

echarts(7大基础图表)的使用

echarts

目录

一、vue2挂载

二、柱状图

2.1、基础柱状图介绍

2.2、标记:最大值\最小值(markPoint)、平均值(markLine)

2.3、显示:数值显示(label)、柱子宽度(barWidth)、横向柱状图

三、折线图

3.1、标记:最大值\最小值(markPoint)、平均值(markLine)、标注区间(markArea)

3.2、线条控制:平滑(smooth)、风格(lineStyle)

3.3、填充风格(areaStyle)

3.4、紧挨边缘(boundaryGap)、缩放(scale)

3.5、堆叠图(stack)

四、散点图

4.1、气泡图:散点大小(symbolSize)、散点颜色(itemStyle.color)效果

4.2、涟漪动画(type:effectScatter)效果

五、直角坐标系常用配置

5.1、网格:grid

5.2、坐标轴:axis

5.3、区域缩放:dataZoom

六、饼图

6.1、显示数值(label.formatter)

6.2、圆环(radius)

6.3、南丁格尔图(roseType)、选中效果(selectedMode)

七、雷达图

7.1、显示数值(label)、区域面积(areaStyle)

7.2、绘制类型(shape)

八、仪表盘图

8.1、数值范围、多个指针、颜色

九、地图

9.1、缩放拖动(roam)、名称显示(label)、初始缩放比例(zoom)、地图中心点(center)

9.2、只显示某个省份地图

9.3、不同城市颜色不同(显示空气质量)

9.4、地图和散点图结合

十、通用配置

10.1、标题:title

10.2、提示:tooltip

10.3、工具按钮:toolbox

10.4、图例:legend

基础小结

一、vue2挂载

(1)、npm i echarts成功后,在项目的package.json文件里可以看到版本号: "echarts": "^4.9.0"。

(2)、在项目的main.js中

  1. import echarts from "echarts"
  2. Vue.prototype.$echarts = echarts;//挂载到原型,可以在全局使用

(3)、官网:快速上手 - 使用手册 - Apache ECharts

(4)、每个图的具体信息配置项:Documentation - Apache ECharts

二、柱状图

2.1、基础柱状图介绍

  1. <template>
  2. <div>
  3. <el-card>
  4. <div
  5. ref="echartsMain"
  6. style="width: 60%; height: 500px"
  7. id="main1"
  8. ></div>
  9. </el-card>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. list: [
  17. { time: "一班", value: 110 },
  18. { time: "二班", value: 90 },
  19. { time: "三班", value: 190 },
  20. { time: "四班", value: 70 },
  21. { time: "五班", value: 300 },
  22. ],
  23. };
  24. },
  25. mounted() {
  26. this.getData();
  27. },
  28. methods: {
  29. getData() {
  30. // this.$nextTick(() => {});//解决挂载时拿不到this.$refs.echartsMain的bug
  31. // let myChart = this.$echarts.init(this.$refs.echartsMain);//这样写也行
  32. let myChart = this.$echarts.init(document.getElementById("main1"));
  33. myChart.setOption({
  34. title: {
  35. text: "基础柱状图显示",
  36. },
  37. xAxis: {//xAxis:直角坐标系中的X轴
  38. type: "category",
  39. data: this.list.map((d) => d.time),
  40. axisLabel: {
  41. //倾斜展示角度
  42. rotate: 60,
  43. // 垂直显示
  44. // formatter: function (value) {
  45. // return value.split("").join("\n");
  46. // },
  47. },
  48. },
  49. yAxis: {//yAxis:直角坐标系中的Y轴
  50. type:'value',//数值轴
  51. },
  52. series: [//series:系列列表
  53. {
  54. barWidth:30,
  55. name: "日期",
  56. type: "bar",//决定图标类型(bar、line、pie)
  57. data: this.list.map((d) => d.value),
  58. },
  59. ],
  60. });
  61. },
  62. },
  63. };
  64. </script>

常见效果如下:


2.2、标记:最大值\最小值(markPoint)、平均值(markLine)

  1. series: [
  2. {
  3. ......
  4. markPoint: {
  5. data: [
  6. {
  7. type: "max",
  8. name: "最大值",
  9. },
  10. {
  11. type: "min",
  12. name: "最小值",
  13. },
  14. ],
  15. },
  16. markLine: {
  17. data: [
  18. {
  19. type: "average",
  20. name: "平均值",
  21. },
  22. ],
  23. },
  24. },
  25. ],

2.3、显示:数值显示(label)、柱子宽度(barWidth)、横向柱状图

  1. series: [
  2. {
  3. ......
  4. barWidth: "30%",
  5. label: {
  6. show: true,
  7. rotate: 60,
  8. position: "top",
  9. },
  10. },
  11. ],

横向展示:只需将xAxis和yAxis的值或者type的值互换即可

  1. xAxis: {
  2. // type: "category",
  3. // data: this.list.map((d) => d.time),
  4. type: "value",
  5. },
  6. yAxis: {
  7. // type: "value",
  8. type: "category",
  9. data: this.list.map((d) => d.time),
  10. },

三、折线图

将series中 type的值设置为"line"即可!一般用于分析数据随着时间的变化趋势!

常见效果如下:


3.1、标记:最大值\最小值(markPoint)、平均值(markLine)、标注区间(markArea)

  1. series: [
  2. {
  3. ......
  4. markPoint: {
  5. data: [
  6. {
  7. type: "max",
  8. },
  9. {
  10. type: "min",
  11. },
  12. ],
  13. },
  14. markLine: {
  15. data: [
  16. {
  17. type: "average",
  18. },
  19. ],
  20. },
  21. markArea: {
  22. data: [
  23. [{ xAxis: "1月" }, { xAxis: "2月" }],
  24. [{ xAxis: "6月" }, { xAxis: "7月" }],
  25. ],
  26. },
  27. },
  28. ],

3.2、线条控制:平滑(smooth)、风格(lineStyle)

  1. series: [
  2. {
  3. ......
  4. smooth: true,
  5. lineStyle: {
  6. color: "green",
  7. type: "dotted",//solid、dotted、dashed
  8. },
  9. },
  10. ],

3.3、填充风格(areaStyle)

  1. series: [
  2. {
  3. ......
  4. areaStyle: { color: "skyblue" },
  5. },
  6. ],

3.4、紧挨边缘(boundaryGap)、缩放(scale)

  1. xAxis: {
  2. type: "category",
  3. data: xDataArr,
  4. boundaryGap: false,//紧挨边缘
  5. },
  6. yAxis: {
  7. type: "value",
  8. scale:true,//脱离0值比例(缩放)
  9. },

3.5、堆叠图(stack)

一组数据基于另一组数据进行累加后展示,防止相近数据交叉,显得‘杂乱无章’

  1. series: [
  2. {
  3. name: "销量",
  4. type: "line",
  5. data: yDataArr,
  6. stack: "all",
  7. areaStyle: {},
  8. },
  9. {
  10. name: "other",
  11. type: "line",
  12. data: yDataArr2,
  13. stack: "all",
  14. areaStyle: {},
  15. },
  16. ],

四、散点图

将series中 type的值设置为"scatter",xAxis和yAxis的type都设置为"value"!

一般用于推断变量间的(正)相关性(eg:身高和体重的关系),也可以用在地图标注上!

  1. <script>
  2. var datas = [
  3. { gender: "male", height: 164.2, weight: 55.5 },
  4. { gender: "male", height: 167.5, weight: 59 },
  5. { gender: "male", height: 170.2, weight: 62.3 },
  6. { gender: "male", height: 176.6, weight: 76.3 },
  7. { gender: "male", height: 179.1, weight: 79.1 },
  8. { gender: "male", height: 177.8, weight: 84.1 },
  9. { gender: "male", height: 180.3, weight: 83.2 },
  10. { gender: "male", height: 180.3, weight: 83.2 },
  11. { gender: "male", height: 183, weight: 90.9 },
  12. ];
  13. var axisData = [];
  14. for (var i = 0; i < datas.length; i++) {
  15. var height = datas[i].height;
  16. var weight = datas[i].weight;
  17. var newArr = [height, weight];
  18. axisData.push(newArr);
  19. }
  20. let myChart = this.$echarts.init(document.getElementById("main1"));
  21. myChart.setOption({
  22. xAxis: {
  23. type: "value",
  24. scale: true,
  25. },
  26. yAxis: {
  27. type: "value",
  28. scale: true,
  29. },
  30. series: [
  31. {
  32. type: "scatter",
  33. data: axisData,//二维数组
  34. },
  35. ],
  36. });
  37. </script>

4.1、气泡图:散点大小(symbolSize)、散点颜色(itemStyle.color)效果

  1. series: [
  2. {
  3. type: "scatter",
  4. data: axisData, //二维数组
  5. showEffectOn:'emphasis',
  6. rippleEffect:{
  7. scale:10
  8. },
  9. symbolSize: function (arg) {
  10. // BMI=体重(kg)/(身高m*身高m) >28即为肥胖 >23.9即为超重
  11. var height = arg[0] / 100;
  12. var weight = arg[1];
  13. var Bmi = weight / (height * height);
  14. if (Bmi > 24) {
  15. return 24;
  16. }
  17. return 10;
  18. },
  19. itemStyle: {
  20. color: function (arg) {
  21. var height = arg.data[0] / 100;
  22. var weight = arg.data[1];
  23. var Bmi = weight / (height * height);
  24. if (Bmi > 24) {
  25. return "red";
  26. }
  27. return "green";
  28. },
  29. },
  30. },
  31. ],

4.2、涟漪动画(type:effectScatter)效果

1、将type原本的值“scatter”设置为“effectScatter,每个散点会由内而外像水波一样荡漾开来!

2、想要鼠标划到对应散点上再出现水波纹:在type同级添加showEffectOn:'emphasis';

3、想要水波纹范围扩大:在type同级添加rippleEffect:{scale:10}

五、直角坐标系常用配置

直角坐标系图表:柱状图、折线图、散点图

5.1、网格:grid

作用:控制直角坐标系的布局和大小

  1. grid: {
  2. show: true,
  3. borderWidth: 10,
  4. borderColor: "gold",
  5. left: 20,
  6. top: 20,
  7. width: 300,
  8. height: 150,
  9. },
  10. xAxis: {.....},
  11. yAxis: {.....},

5.2、坐标轴:axis

(1)、类型type:

value:数值轴,会自动从目标数据中读取数据

category:类目轴,通过data设置类目数据

(2)、显示位置position

xAxis:可取值为top或者bottom

yAxis:可取值为left或者right

5.3、区域缩放:dataZoom

(1)、类型type:

slider:滑块滚动

inside:鼠标滚动

(2)、指明产生作用的轴

xAxisIndex:控制哪个x轴,值为数字

yAxisIndex:控制哪个y轴,值为数字

(3)、指明初始状态的缩放情况

start:起始百分比

end:结束百分比

  1. dataZoom: [
  2. {
  3. type: "slider",
  4. // type: "inside",//滚动条不显示,直接鼠标滚动
  5. xAxisIndex: 0,
  6. },
  7. {
  8. type: "slider",
  9. yAxisIndex: 0,
  10. start: 0,
  11. end: 80,
  12. },
  13. ],
  14. xAxis: {.....},
  15. yAxis: {.....},

六、饼图

将series中 type的值设置为"pie"即可!一般用于反映模块的占比情况!

6.1、显示数值(label.formatter)

  1. myChart.setOption({
  2. series: [
  3. {
  4. type: "pie",
  5. data: this.list,
  6. label: {
  7. show: true,
  8. formatter: function (arg) {
  9. return (
  10. arg.name + "平台" + arg.value + "元\n" + arg.percent + "%"
  11. );
  12. },
  13. },
  14. },
  15. ],
  16. });

6.2、圆环(radius)

  1. label: {......},
  2. radius:['50%','75%']//[内圆半径,外圆半径]

6.3、南丁格尔图(roseType)、选中效果(selectedMode)

  1. label: {......},
  2. roseType:'radius',//饼图的每个区域的半径和模块占比相关,
  3. selectedMode:'multiple',//single:单个区域偏离原点、multiple:多个区域偏离原点

七、雷达图

将series中 type的值设置为"radar"即可!一般用于分析多个维度数据与标准数据的比对情况!

7.1、显示数值(label)、区域面积(areaStyle)

  1. let myChart = this.$echarts.init(document.getElementById("main1"));
  2. var dataMax = [
  3. { name: "易用性", max: 100 },
  4. { name: "功能", max: 100 },
  5. { name: "拍照", max: 100 },
  6. { name: "跑分", max: 100 },
  7. { name: "续航", max: 100 },
  8. ];
  9. myChart.setOption({
  10. radar: {
  11. indicator: dataMax, //配置各个维度的最大值,
  12. },
  13. series: [
  14. {
  15. type: "radar",
  16. label: {
  17. show: true,
  18. },
  19. areaStyle: {}, //给每个对象添加阴影区域
  20. data: [
  21. {
  22. name: "华为手机",
  23. value: [80, 90, 80, 82, 90],
  24. },
  25. {
  26. name: "中兴手机",
  27. value: [70, 82, 75, 70, 78],
  28. },
  29. ],
  30. },
  31. ],
  32. });

7.2、绘制类型(shape)

  1. radar: {
  2. indicator: dataMax, //配置各个维度的最大值,
  3. shape:'polygon',//polygon:多边形 circle:圆形
  4. },
  5. series: [......],

八、仪表盘图

将series中 type的值设置为"gauge"即可!一般用于分析进度把控以及数据范围的监测

  1. myChart.setOption({
  2. series: [
  3. {
  4. type: "gauge",
  5. data: [
  6. {
  7. value: 97,
  8. itemStyle: {
  9. color: "pink",
  10. },
  11. }, //每一个对象就代表一个指针
  12. {
  13. value: 80,
  14. itemStyle: {
  15. color: "green",
  16. },
  17. },
  18. ],
  19. min:50 //min max 仪表盘数值范围
  20. },
  21. ],
  22. });

8.1、数值范围、多个指针、颜色

数值范围:min、max

多个指针:增加data中的数组元素;

颜色:(itemStyle.color)

九、地图

可以用echarts实现矢量地图(type:'map'),不过一般都用百度地图(需要申请ak)

客观原因:不能放全貌视图图片。

   (1)、使用axios获取矢量数据;

   (2)、在回调函数中注册地图矢量数据;

   (3)、配置geo的type为"map",map为"chinaMap"

  1. <template>
  2. <div>
  3. <el-card>
  4. <div ref="echartsMain" style="width: 40%; height: 500px;border:1px solid red" id="main1"></div>
  5. </el-card>
  6. </div>
  7. </template>
  8. <script>
  9. import axios from "axios";
  10. export default {
  11. mounted() {
  12. this.getData();
  13. },
  14. methods: {
  15. getData() {
  16. let myChart = this.$echarts.init(this.$refs.echartsMain); //这样写也行
  17. // vue使用axios获取本地json文件数据模拟接口请求(china.json在public文件夹里)
  18. axios
  19. .get("http://10.52.12.51:8081/china.json")
  20. .then((res) => {
  21. this.$echarts.registerMap("chinaMap", res.data);
  22. myChart.setOption({
  23. geo: {
  24. type: "map",
  25. map: "chinaMap",
  26. roam:true,//允许缩放和拖动
  27. label:{
  28. show:true//显示标签
  29. },
  30. zoom:1,//设置初始化的缩放比例
  31. center:[87.617733,43.792818],//在盒子里的中心点
  32. },
  33. });
  34. })
  35. .catch((error) => {
  36. console.log(error);
  37. });
  38. // jquery获取
  39. // $.get('json/map/china.json',function(res){
  40. // console.log(res,'1111');
  41. // })
  42. },
  43. },
  44. };
  45. </script>

常用配置如下:


9.1、缩放拖动(roam)、名称显示(label)、初始缩放比例(zoom)、地图中心点(center)

见上述代码

9.2、只显示某个省份地图

推荐官网:阿里云 DataV - 数据可视化平台,在里面的可视化学院里自己下载想要的地区的JSON文件即可!

将原代码里的”china.json“替换成想要的”省份.json“文件。

9.3、不同城市颜色不同(显示空气质量)

(1)、将空气质量的数据设置给series;

(2)、将series下的数据和第0个geo配置关联在一起;

(3)、结合visualMap配合使用

  1. //数据:
  2. var airdata = [
  3. {name: "北京",value: "39.92"},
  4. {name: "天津",value: "39.13"},
  5. {name: "重庆",value: "66"},
  6. {name: "河北",value: "147"},
  7. {name: "河南",value: "273"},
  8. {name: "云南",value: "25.04"},
  9. {name: "湖北",value: "27"},
  10. ];
  11. geo: {......},
  12. series: [
  13. {
  14. data: airdata,
  15. geoIndex: 0,//将空气质量的数据和第0个geo配置关联在一起
  16. type: "map",
  17. },
  18. ],
  19. visualMap: {
  20. min: 0,
  21. max: 300,
  22. inRange: {
  23. color: ["pink", "red"],//控制颜色渐变的范围
  24. },
  25. calculable:true//左下角出现三角滑块,便于控制数值
  26. },

9.4、地图和散点图结合

(1)、将散点的坐标数据配置给series下的另一个对象;

(2)、将series中的type值设为'effectScatter';

(3)、指明散点使用的坐标系统【coordinateSystem:'geo'】(geo系统);

(4)、调整涟漪动画效果

  1. //数据:
  2. var scatterdata = [
  3. {
  4. value: [117.283042, 31.86119],
  5. },
  6. ];
  7. series: [
  8. {......},
  9. {
  10. data:scatterdata,//配置散点的坐标数据
  11. type:'effectScatter',
  12. coordinateSystem:'geo',//指明散点使用的坐标系统(geo系统)
  13. rippleEffect:{
  14. scale:10,//调整涟漪动画的缩放比例
  15. }
  16. }
  17. ],

十、通用配置

10.1、标题:title

(1)、文字样式:textStyle

(2)、标题边框:borderWidth、borderColor、borderRadius

(3)、标题位置:top、left、right、bottom

  1. title: {
  2. text: "基础柱状图显示",
  3. textStyle: {
  4. color: "red",
  5. },
  6. borderWidth: 5,
  7. borderColor: "blue",
  8. borderRadius: 5,
  9. top: 10,
  10. left: 100,
  11. },
  12. xAxis: {......},
  13. yAxis: {......},

10.2、提示:tooltip

(1)、触发类型(trigger):item、axis

(2)、触发时机(triggerOn):mouseover、click

(3)、格式化(formatter):字符串模板、回调函数

  1. title: {......},
  2. tooltip: {
  3. trigger: "axis",
  4. triggerOn: "click",
  5. // formatter: "{b} 的成绩是 {c}",
  6. formatter: function(msg){
  7. console.log(msg[0]);
  8. return msg[0].name+'分数为'+msg[0].data
  9. },
  10. },
  11. xAxis: {......},

10.3、工具按钮:toolbox

内置有导出图片、数据视图、动态类型切换、数据区域缩放、数据重置5个工具

  1. title: {......},
  2. toolbox: {
  3. feature: {
  4. saveAsImage: {},//导出图片
  5. dataView: {},//更改图表数据
  6. restore: {},//将更改的数据还原
  7. dataZoom: {},//框选指定区域“放大”(单独展示)
  8. magicType: {//类型切换:可以将原数据切换为不同类型的图表不同再画一个了
  9. type: ["bar", "line", "stack"],
  10. },
  11. },
  12. },
  13. xAxis: {......},

10.4、图例:legend

legend用于筛选系列:它里面的data的值需要和series数组中该组数据的name值完全一致,否则无法显示。点击上面任意一个系列框框,下面就会留下对应的数据。

  1. legend: {
  2. data: ["第一种", "第二种"],
  3. },
  4. series: [
  5. {
  6. name: "第一种",
  7. type: "bar",
  8. data: this.list.map((d) => d.value),
  9. },
  10. {
  11. name: "第二种",
  12. type: "bar",
  13. data: yData2,
  14. },
  15. ],

基础小结

nametype

use

柱状图bar                  比较不同类别之间的数据差异
折线图line                  分析数据随着时间的变化趋势
散点图scatter/effectScatter                  推断变量间的(正)相关性
饼图pie                  反映的占比情况
雷达图radar                  分析多个维度数据与标准数据的比对情况
仪表盘图gauge                  分析进度把控以及数据范围的监测
地图map                  显示各种地理位置

B站链接:22_地图的基本实现和常见配置_哔哩哔哩_bilibili

源码地址:电商: 电商数据可视化配套素材 - Gitee.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/938960
推荐阅读
相关标签
  

闽ICP备14008679号