echarts数据可视化项目搭建(二)

本文介绍ECharts图表的高级配置技巧,包括主题设置、自定义调色盘、颜色渐变、图表自适应、加载动画及增量动画实现方法,并提供简单动画配置选项说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客内容参考黑马课程,详细信息请参考以下网址

主题设置

默认主题

重点

//通过echarts.init方法设置light、dark两种默认主题
echarts.init(document.getElementById("canvas_area"),"dark")

示例

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.js"></script>
    <title>柱状图</title>
  </head>
  <body>
    <div style="width: 600px; height: 400px" id="canvas_area"></div>
  </body>
  <script>
    var myChart = echarts.init(document.getElementById("canvas_area"), "dark"); //暗色主题
    // var myChart = echarts.init(document.getElementById("canvas_area"), "light");//亮色主题
    var option = {
      title: {
        text: "期末考试成绩",
        link: "https://www.baidu.com",
        textStyle: {
          color: "gray",
          fontStyle: "normal",
        },
      },
      xAxis: {
        // x轴
        type: "category", //类目轴
        data: ["张三", "李四", "王五"],
      },
      tooltip: {},
      yAxis: {
        //y轴
        //数值轴
        type: "value",
      },
      series: [
        //系列列表
        {
          name: "语文",
          type: "bar",
          data: [40, 50, 60],
        },
      ],

      // myChart.setOption(option);
    };
    myChart.setOption(option);
  </script>
</html>

效果

在这里插入图片描述

自定义主题

步骤

调色盘

一组颜色,图形、主题等都会自动从中选择颜色

主题

自定义主题时,其中的调色盘

全局

配置在Option配置项中

var option={
  color:['red','green',...]
  ...
}

局部

设置在series配置项中

 var option={
 	series:[{
 		type:'bar',
 		color:['red','green',...],
 		...
 	}]
 }

颜色渐变

线性渐变

itemStyle:{
	color:{
		type:'linear',
		x:0,
		y:0,
		x2:0,
		y2:1,
		colorStops:[{
			offset:0,
			color:'gray'
		},{
			offset:1,
			color:'green'
		}],
	}
}

效果
在这里插入图片描述

径向渐变

itemStyle:{
	color:{
		type:'radial',
		x:0.5,
		y:0.5,
		r:0.5,
		colorStops:[{
			offset:0,
			color:'gray'
		},{
			offset:1,
			color:'green'
		}]
	}
}

效果
在这里插入图片描述

可视化图表自适应

重点

//写法一:监听窗口变化事件并调用echarts中的resize()函数
// window.onresize = function () {
//   myChart.resize();
// };
//写法二
window.onresize = myChart.resize;

示例

<script>
  var myChart = echarts.init(document.getElementById("canvas_area"));
  var option = {
    title: {
      text: "期末考试成绩",
      link: "https://www.baidu.com",
      textStyle: {
        color: "gray",
        fontStyle: "normal",
      },
    },
    xAxis: {
      // x轴
      type: "category", //类目轴
      data: ["张三", "李四", "王五"],
    },
    yAxis: {
      //y轴
      //数值轴
      type: "value",
    },
    series: [
      //系列列表
      {
        name: "语文",
        type: "bar",
        data: [40, 50, 60],
      },
    ],
  };
  myChart.setOption(option);
  //图表随着浏览器窗口大小自适应变化,写法一
  // window.onresize = function () {
  //   myChart.resize();
  // };
  //写法二
  window.onresize = myChart.resize;
</script>

效果
在这里插入图片描述

实现简单的加载动画

重点

// myChart.showLoading();两者在合适的时机进行显示和隐藏
// myChart.hideLoading();

示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>地图实现</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.js"></script>
  </head>
  <body>
    <div id="canvas" style="width: 600px; height: 400px"></div>
  </body>
  <script>
    // series下新增一个对象
    // 准备数据散点,配置给series下的另一个对象
    var scatter_data = [
      {
        value: [117, 31],
      },
    ];
    // 配置series下的新对象type值为effectScatter
    // 指明散点图的坐标系统为geo
    // 调整涟漪动画
    var myChart = echarts.init(document.getElementById("canvas"));
    var url = "https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json";
    myChart.showLoading();//ajax请求前显示加载动画
    $.get(url, function (resp) {
      myChart.hideLoading();//数据请求成功后隐藏加载动画
      //使用ajax获取矢量地图数据
      console.log(resp);
      //生成随机数据
      let eachdata = new Array();
      for (i = 0; i < resp["features"].length; i++) {
        name = resp["features"][i]["properties"].name;
        // console.log(name);
        value = Math.round(Math.random() * 100);
        eachdata.push({ name: name, value: value });
        // console.log(eachdata);
      }
      echarts.registerMap("chinamap", resp); //在ajax函数中注册地图矢量数据
      var option = {
        //配置数据
        series: [
          {
            data: eachdata,
            geoIndex: 0, //将数据与第0个geo配置关联在一起
            type: "map",
          },
          {
            data: scatter_data,
            type: "effectScatter",
            coordinateSystem: "geo",
            rippleEffect: {
              scale: 10,
            },
          },
        ],
        //地图显示关键点
        visualMap: {
          min: 0,
          max: 110,
          inRange: {
            color: ["white", "red"], //设置颜色渐变效果
          },
          calculable: true, //出现滑块
        },
        //配置geo的type为map
        geo: {
          type: "map",
          map: "chinamap",
          roam: true, //设置缩放以及拖动效果
          label: {
            show: false, //展示标签
          },
        },
      };
      myChart.setOption(option);
    });
  </script>
</html>

效果
在这里插入图片描述

增量动画实现

重点

//在数据更新之后,生成新的Option,然后使用echarts的setOption进行数据更新
//注意,新生成的option与原option是合并关系而并非覆盖关系
$("#add-data").click(function () {
  name_list.push("小张");
  data_list.push(90);
  var option = {
    xAxis: {
      data: name_list,
    },
    series: [
      {
        data: data_list,
      },
    ],
  };
  myChart.setOption(option);
});

示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.js"></script>
    <title>柱状图之增量动画</title>
  </head>
  <body>
    <div style="width: 600px; height: 400px" id="canvas_area"></div>
    <!-- <div id="canvas_area" style="height: 400px"></div> -->
    <button id="change-data">改变数据</button>
    <button id="add-data">增加数据</button>
  </body>
  <script>
    var myChart = echarts.init(document.getElementById("canvas_area"));
    var name_list = ["张三", "李四", "王五"];
    var data_list = [40, 50, 60];
    var option = {
      title: {
        text: "期末考试成绩",
        link: "https://www.baidu.com",
        textStyle: {
          color: "gray",
          fontStyle: "normal",
        },
      },
      xAxis: {
        // x轴
        type: "category", //类目轴
        data: name_list,
      },
      yAxis: {
        //y轴
        //数值轴
        type: "value",
      },
      series: [
        //系列列表
        {
          name: "语文",
          type: "bar",
          data: data_list,
          markPoint: {
            data: [
              {
                type: "max",
                name: "最大值",
              },
              {
                type: "min",
                name: "最小值",
              },
            ],
          },
          markLine: {
            data: [
              {
                type: "average",
                name: "平均值",
              },
            ],
          },
          label: {
            show: true,
            position: "inside",
          },
        },
      ],
    };
    myChart.setOption(option);
    $("#add-data").click(function () {
      name_list.push("小张");
      data_list.push(90);
      var option = {
        xAxis: {
          data: name_list,
        },
        series: [
          {
            data: data_list,
          },
        ],
      };
      myChart.setOption(option);
    });
    $("#change-data").click(function () {
      data_list = [40, 50, 90];
      var option = {
        series: [
          {
            data: data_list,
          },
        ],
      };
      myChart.setOption(option);
    });
  </script>
</html>

效果
在这里插入图片描述

简单动画配置项

var option={
	animation:true;//动画是否开启
	//animationDuration:2000,//动画时长,单位:毫秒
	animationDuration:function(arg){
		return 2000*arg;
	},
	animationEasing:'linear',//动画变化是否均匀 bounceOut回弹效果
	...
}

关于全局echarts对象和echartsInstance对象

var myChart = echarts.init(document.getElementById("canvas_area"));

全局echarts对象就是通过引入js文件后可直接使用的对象,如上面的echarts
echartsInstance对象就是调用echarts.init()方法返回的对象,如上面的变量myChart

echarts.connect()

将多个图表进行拼接

echarts.connect([myChart1,myChart2]);

其他echarts实例对象方法

on/off绑定和解绑事件处理函数

myChart.on('click',function(arg){
	console.log(111);
	console.log(arg);
})

dispatchAction 触发某些行为

myCharts.dispatchAction({
	type:'highlight',//事件类型
	seriesIndex:0,//图表索引
	dataIndex:1//高亮位置
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夺笋123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值