ECharts 入门学习

Posted 面条请不要欺负汉堡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECharts 入门学习相关的知识,希望对你有一定的参考价值。

一 . 小点整理

简单使用

1、echarts柱状图x轴数据隔一个显示
xAxis:  
	axisLabel: 
		interval:0 
	
,
2、显示数值
柱状图上方显示数值
 series: [
	 	
		type: 'bar',
		itemStyle: 
			normal: 
				label: 
					show: true, //开启显示
					position: 'top', //在上方显示
					textStyle:  //数值样式
						color: 'black',
						fontSize: 12
					
				
			
		
	,
	]
折线图 显示数据
series: [
			 type: 'line',
		 showSymbol: true,
		 label: 
			  normal: 
				   show: true,
				   position: 'top'
			  
		 ,
	]
3.滚动条
 option = 
	dataZoom: [
		type: 'slider',
		show: true,
		xAxisIndex: [0],
		left: '9%',
		bottom: -5,
		start: 10,
		end: 90 //初始化滚动条
	],

4.显示每条数据的颜色
option = 
	legend: 
		data: ["西药费", "成药费", "草药费", "其他"]
	,
	
	series: [
		 name: '西药费', type: 'bar' ,
		 name: '成药费', type: 'bar' ,
		 name: '草药费', type: 'bar' ,
		 name: '其他', type: 'bar' ,
	]
;
5.统一颜色的设置
 option = 
    color: ['#01b0f1'],

 echarts x轴文字显示不全 

 解决方式:

(1)倾斜方式

xAxis:

                    axisLabel:

                        interval: 0,//坐标轴刻度标签的显示间隔(在类目轴中有效哦),默认会采用标签不重叠的方式显示标签(也就是默认会将部分文字显示不全)
可以设置为0强制显示所有标签,如果设置为1,表示隔一个标签显示一个标签,如果为3,表示隔3个标签显示一个标签,以此类推

                        rotate:290//右边,40 左边

                   

 (2)调用formatter文字显示

axisLabel:

                        interval: 0,

                        formatter: function (value)

                            var ret = ""; //拼接加\\n返回的类目项

                            var maxLength = 2; //每项显示文字个数

                            var valLength = value.length; //X轴类目项的文字个数

                            var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数

                            if (rowN > 1)

                                //如果类目项的文字大于3,

                                for (var i = 0; i < rowN; i++)

                                    var temp = ""; //每次截取的字符串

                                    var start = i * maxLength; //开始截取的位置

                                    var end = start + maxLength; //结束截取的位置

                                    //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧

                                    temp = value.substring(start, end) + "\\n";

                                    ret += temp; //凭借最终的字符串

                               

                                return ret;

                            else

                                return value;

                           

                        ,

                    ,

axisLabel:

                        interval: 0,

                        formatter: function (value,index)

                            if (index % 2 != 0)

                                return "\\n\\n" + value;

                            else

                                return value;

                           

                        ,

                    ,

 饼图百分比精确度

series: [

                   

                        type: "pie",

                        radius: "55%", //设置饼图大小

                        center: ["50%", "55%"], //设置饼图位置

                        label:  //饼图图形上的文本标签

                            normal:

                                textStyle:

                                    color: "#fff",

                                    fontWeight: "bold",

                                    fontSize: this.setFontSize(0.16), //文字的字体大小

                                ,

                                formatter: function (data)

                                    //  "b:c(d%)",

                                    let a = data.name; //名称

                                    let b = data.percent.toFixed(1) + "%"; //百分比 保留整数

                                    let c = data.value; //值

                                    return a + ":" + c + "(" + b + ")";

                                ,

                            ,

                        ,

                        data:

 [

                name: "云票", value: 27 ,

                name: "云触", value: 25 ,

                name: "云书", value: 18 ,

            ],

,

                    ,

                ],

 低于多少值时,颜色变化(比如:20时,变成红色)

  series: [
        
            data:  [ 120,150,80, 70,110,130,
            
          value: 20,
          itemStyle: //颜色设置
            color: '#f00'
         
        ],
            type: "bar",
            showBackground: true,
            backgroundStyle:
                color: "rgba(180, 180, 180, 0.2)",
            ,
        ,
    ],

 字体随着窗口变化而变化

methods:
    getEcharts(newData)
        // 绘制图表
        myChart.setOption(
            textStyle:
                fontSize: this.setFontSize(0.16),//16px
                color: "#fff",
            ,
        )
    ,
    // echarts大屏字体自适应的
    setFontSize(res)
        let docEl = document.documentElement,
            clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
        if (!clientWidth) return;
        let fontSize = 100 * (clientWidth / 1920);
        return res * fontSize;

    
,

echarts柱状图label位置 

//1. 调整数据
            this.$lodash.map(nowData, (el, key) => 
                this.$lodash.forEach(el, (val) => 
                    // 低于20时,颜色变成红色
                    if (parseInt(val.value) <= 20) 
                        val.itemStyle = 
                            color: "#f00",
                        ;
                    
                    // 大于等于500时,label位置调整
                    val.label = 
                        position:
                            parseInt(val.value) >= 500
                                ? "insideRight"
                                : "right",
                    ;
                );
            );

二.  样式

echarts折线图柱状图的坐标轴的颜色及样式的设置

基本用法请查看echarts官网。

图例legend的设置。

1.字体和颜色的设置

1

2

3

4

textStyle:

                fontSize:15,

                color:'#fff'

            

2.样式的设置

1

2

3

4

5

6

7

8

9

legend:

           data:systemName,

           itemWidth:40,

           itemHeight:20,

           textStyle:

               fontSize:15,

               color:'#fff'

           

       

  可以根据需求自己设置。

 工具箱toolbox的设置

tooltip悬浮提示框

    type: 'line',

    lineStyle:

        color: '#48b',

        width: 2,

        type: 'solid'

    ,

   textStyle:

      color:'#fff'

   

x轴坐标xAxis的字体颜色大小,坐标线颜色,以及网格线的设置

xAxis : [

            

                type: 'category',

                boundaryGap: false,

                data: time,

                splitLine:show: false,//去除网格线

                splitArea : show : true,//保留网格区域

                axisLine:

                    lineStyle:

                        type: 'solid',

                        color: '#fff',//左边线的颜色

                        width:'2'//坐标线的宽度

                    

                ,

                axisLabel:

                    textStyle:

                        color: '#fff',//坐标值得具体的颜色

                    

                

            

        ]

yAsix的设置相同

yAxis : [

           

               type : 'value',

               splitLine:show: false,//去除网格线

               splitArea : show : true,//保留网格区域

               axisLine:

                   lineStyle:

                       type: 'solid',

                       color:'#fff',

                       width:'2'

                   

               ,

               axisLabel:

                   textStyle:

                       color: '#fff'

                   

               

           

       ]

三 .打印

 转成图片base64编码 就可以打印
    var jlcgImgBase64;

jlcgImgBase64 = myChart.getDataURL();
    document.getElementById('zktbImg').setAttribute('src',jlcgImgBase64)

<div id="zktb" style="width:800px;height:430px;float: left;display: none;" ></div>
<img id="zktbImg" style="width:800px;height:430px;float: left;" />
//获取折线图图 div(对象)datas(数据),dybzVal(靶值),sdVal(sd值)
function initChart()
    // 图片base64编码
    var jlcgImgBase64;
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('zktb'));
    // 指定图表的配置项和数据
    var option = 
        tooltip: ,
        legend: ,
        animation:false,//关闭动画
        xAxis:
            type : 'category',//折线
            boundaryGap: false,//坐标轴与文字对齐
            data : ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'],
        ,
        yAxis: 
            type: 'value',
            splitLine: //网格线不显示
                show: false
            ,
            min:30,//最小值
            max:100,//最大值
            "axisTick":       //y轴刻度线
              "show":false
            ,
            axisLabel : // 坐标不写文字
                formatter: function()
                      return "";
                
            
        ,
        series: [
            name: '值为:',
            type: 'line',//点与点间的连接线 类型
            data: [40,50,20,40,20,30,50,30,23,40,50,20,40,75],//数据
            label: 
                normal: 
                    show: true,
                    position: 'top'
                
            
            
        ]
    ;

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    jlcgImgBase64 = myChart.getDataURL();
    //动态的渲染到打印html的标签上
    document.getElementById('zktbImg').setAttribute('src',jlcgImgBase64)

四. 地图下钻

获取地区的json的map 包:地图选择

<template>
    <div class="container">
        <div id="lineChart" style="height: 500px"></div>
    </div>
</template>

<script>
export default 
    name: "EffectScatter",
    data() 
        return 
            //设置
            mapChart: "",
            //区域的颜色
            colorArr: [
                "#FFB7DD",
                "#FF8888",
                "#FFEE99",
                "#FFFF00",
                "#CCFF33",
                "#99FF99",
                "#BBFFEE",
                "#CCDDFF",
                "#E38EFF",
                "#BA55D3",
                "#DDAA00",
                "#FFFF00",
                "#CC00CC",
                "#FF00FF",
                "#FF8C00",
                "#FFDEAD",
            ],
            //这是需要显示坐标的数据组
            coordinateData: [
                
                    name: "平潭",
                    value: [119.791197, 25.503672, 223],
                ,
                
                    name: "福州市",
                    value: [119.306239, 26.075302, 223],
                ,
                
                    name: "南平市",
                    value: [118.178459, 26.635627, 188],
                ,
                
                    name: "宁德市",
                    value: [119.527082, 26.65924, 114],
                ,
                
                    name: "三明市",
                    value: [117.635001, 26.265444, 89],
                ,
                
                    name: "漳州市",
                    value: [117.661801, 24.510897, 187],
                ,
                
                    name: "莆田市",
                    value: [119.007558, 25.431011, 75],
                ,
                
                    name: "泉州市",
                    value: [118.589421, 24.908853, 336],
                ,
            ],
        ;
    ,
    mounted() 
        this.getMapChart("350000");
    ,
    methods: 
        // echarts初始化
        getMapChart(mapCode) 
            this.mapChart = this.$echarts.init(
                document.getElementById("lineChart")
            );
            //获取本得地图json 包
            const data = require("../echarts/map/" + mapCode + ".json");
            if (data) 
                this.$echarts.registerMap("福建", data);
                let areaColor = [];
                for (var i = 0; i < data.features.length; i++) 
                    //设置每个区域的颜色
                    areaColor.push(
                        name: data.features[i].properties.name,
                        itemStyle: 
                            areaColor: this.colorArr[i],
                            color: "#fff",
                        ,
                    );
                
                this.extendsMap(
                    mapName: "福建", // 地图展示
                    mapCode: mapCode, //当前的地图json 包的d代码
                    areaColor: areaColor,
                    goDown: true, // 是否下钻
                    // 下钻回调 type 表示但双击
                    callback: function (row, option, instance, type) 
                        if (type == "click") 
                            //单击
                            console.log(row, option, instance, "单击");
                         else 
                            //双击
                            console.log(row, option, instance, "双击");
                        
                    ,
                    // 数据展示
                    data: this.coordinateData,
                );
            
        ,
        /**
         * opt 设置
         */
        extendsMap(opt) 
            let defaultOpt = 
                mapName: "china", // 地图展示
                goDown: false, // 是否下钻
                bgColor: "#404a59", // 画布背景色
                areaColor: [], //区域颜色
                data: [], //坐标数据
                // 下钻回调(点击的地图名、实例对象option、实例对象)
                callback: function (name, option, instance) ,
            ;
            if (opt) opt = $.extend(defaultOpt, opt);
            let option = 
                backgroundColor: opt.bgColor,
                // 鼠标以上 显示的窗口内容
                tooltip: 
                    show: false,
                ,
                geo: 
                    map: opt.mapName,
                    zoom: 1.2,
                    roam: true,
                    itemStyle: 
                        areaColor: "#4474ec", // 区域颜色
                        borderColor: "#fff", // 区域边线颜色
                    ,
                    label: 
                        show: false, // 是否展示名称
                    ,
                    roam: true, //是否允许缩放
                    //鼠标以上的效果 区域的变化
                    emphasis: 
                        // 地图区域上的
                        label: 
                            show: false, //
                        ,
                        itemStyle: 
                            areaColor: "#42b983", // 高亮时区域颜色
                        ,
                    ,
                    //设置每个区域的颜色
                    regions: opt.areaColor,
                ,
                // 这是 瞄点坐标设置
                series: [
                    
                        name: "Top 5",
                        type: "effectScatter",
                        coordinateSystem: "geo",
                        zlevel: 2,
                        rippleEffect: 
                            //涟漪特效
                            period: 4, //动画时间,值越小速度越快
                            brushType: "stroke", //波纹绘制方式 stroke, fill
                            scale: 3, //波纹圆环最大限制,值越大波纹越大
                        ,
                        //坐标上 显示的文字
                        label: 
                            //圆点显示
                            normal: 
                                show: true,
                                position: "right", //显示位置
                                offset: [5, 10], //偏移设置
                                formatter: function (params) 
                                    //圆环显示文字
                                    return (
                                        params.data.name +
                                        ":" +
                                        params.data.value[2]
                                    );
                                ,
                                color: "#ffffff",
                                lineHeight: 25,
                                padding: [3, 4, 5, 6],
                                backgroundColor: "#0000007d",
                                fontSize: 15,
                            ,
                            emphasis: 
                                show: false,
                            ,
                        ,
                        symbol: "circle",
                        symbolSize: function (val) 
                            return 10 + val[2] * 0; //圆环大小
                        ,
                        itemStyle: 
                            normal: 
                                show: false,
                                color: "#f00",
                            ,
                        ,
                        //这是需要显示坐标的数据组
                        data: opt.data,
                    ,
                ],
            ;
            this.mapChart.setOption(option);
            var timeFn = "";
            // 单击事件
            this.mapChart.on("click", function (params) 
                clearTimeout(timeFn);
                //由于单击事件和双击事件冲突,故单击的响应事件延迟250毫秒执行
                timeFn = setTimeout(function () 
                    if (opt.goDown && params.name) 
                        opt.callback(params, option, opt.mapCode, "click");
                    
                , 250);
                // 注意:
                //如果要获取点击区域该区域的数据(params.data),这时要点在描点上,否则获取不到 data的数据
            );
            //绑定双击事件
            this.mapChart.on("dblclick", function (params) 
                clearTimeout(timeFn);
                if (opt.goDown && params.name) 
                    opt.callback(params, option, opt.mapCode, "dblclick");
                
            );
        ,
    ,
;
</script>

参考案例:

Make A Pie

小案例

1,饼图,柱形图,折线图

 myChart.clear();
window.onresize = function() 
   myChart.resize();
;
var option = ;
if (type == 'pie') 
//饼图
   option = 
		color: ['#01b0f1', '#92d14f'],
		tooltip: 
			 trigger: 'item',
			 formatter: "b : c (d%)"
		,
		legend: 
			 orient: 'vertical',
			 left: 'left',
			 data:['支付宝支付', '微信支付']
		,
		series: [
			 name: '',
			 type: 'pie',
			 radius: '55%',
			 center: ['50%', '60%'],
			 data:['34', '100'],
			 itemStyle: 
				  emphasis: 
					   shadowBlur: 10,
					   shadowOffsetX: 0,
					   shadowColor: 'rgba(0, 0, 0, 0.5)'
				  
			 
		]
   
 else if (type == 'line') 
//折线图
   option = 
		color: ['#01b0f1'],
		visualMap: [
			 show: false,
			 type: 'continuous',
			 seriesIndex: 0,
			 min: 0,
			 max: 400
		],
		tooltip: 
			 trigger: 'axis'
		,
		xAxis: [
			 data:["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05"]
		],
		yAxis: [
			 splitLine: 
				  show: false
			 
		],
		series: [
			 type: 'line',
			 showSymbol: true,
			 label: 
				  normal: 
					   show: true,
					   position: 'top'
				  
			 ,
			 data:[10, 11, 12, 13, 14]
		]
   ;
 else 
//柱形图
   option = 
		color: ['#01b0f1'],
		xAxis: 
			 type: 'category',
			 data: ['内科', '外科', '儿科', '骨科', '小额', '脑壳', '尿液科']
		,
		yAxis: 
			 type: 'value'
		,
		series: [
			 data:[120, 200, 150, 80, 70, 110, 130],
			 type: 'bar',
			 barWidth: '30%',
		]
   


myChart.hideLoading();
myChart.setOption(option);

<div id="zktb" style="width: 800px;height:430px;" >


// 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('zktb'));

    // 指定图表的配置项和数据
    var option = 
        tooltip: ,
        legend: ,
        xAxis:
            type : 'category',//折线
            boundaryGap: false,//坐标轴与文字对齐
            data : ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'],
        ,
        yAxis: 
            type: 'value',
            splitLine: //网格线不显示
                show: false
            ,
            "axisTick":       //y轴刻度线
              "show":false
            ,
            axisLabel : // 坐标不写文字
                formatter: function()
                      return "";
                
            
        ,
        series: [
            name: '销量',
            type: 'line',//点与点间的连接线 类型
            data: [10,20,30,35,45,56,20,30,23,40,50,20,40,30,23,40,50,20,40,20,30,50,30,23,40,50,20,40,75],//数据
            label: 
                normal: 
                    show: true,
                    position: 'top'
                
            ,//显示数据在点上
            markLine: 
                symbol:'none',//去掉箭头
                animation:false,//去掉动画效果
                data : [
                    
                        xAxis: 0, 
                        yAxis: 10,
                        itemStyle:
                            normal:
                                lineStyle:type:'solid',color:'#F00',//设置线的样式
                                label:show:true,formatter:'X-3SD'//显示文字在右边
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 20,
                        itemStyle:
                            normal:
                                lineStyle:type:'dashed',color:'#6f327dfa',
                                label:show:true,formatter:'X-2SD'
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 30,
                        itemStyle:
                            normal:
                                lineStyle:type:'solid',color:'#00a65a',
                                label:show:true,formatter:'X-SD'
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 40,
                        itemStyle:
                            normal:
                                lineStyle:type:'solid',color:'#000',
                                label:show:true,formatter:'靶值'
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 50,
                        itemStyle:
                            normal:
                                lineStyle:type:'solid',color:'#00a65a',
                                label:show:true,formatter:'X+SD'
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 60,
                        itemStyle:
                            normal:
                                lineStyle:type:'dashed',color:'#6f327dfa',
                                label:show:true,formatter:'X+2SD'
                            
                        ,
                    ,
                    
                        xAxis: 0, 
                        yAxis: 70,
                        itemStyle:
                            normal:
                                lineStyle:type:'solid',color:'#F00',//设置线的样式
                                label:show:true,formatter:'X+3SD'//显示文字在右边
                            
                        ,
                    
                ]
            
        ]
    ;

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);

以上是关于ECharts 入门学习的主要内容,如果未能解决你的问题,请参考以下文章

ECharts 入门学习

echarts入门

图表控件== 百度 echarts的入门学习

ECharts.js学习 简单入门

入门React 17 + Vite + ECharts 实现疫情数据可视化「03 学习 React Hooks」

入门React 17 + Vite + ECharts 实现疫情数据可视化「03 学习 React Hooks」