echarts(一)自定义配置

本文介绍了Echarts在使用过程中的一些自定义配置技巧,包括如何解决保存图片的问题、优化鼠标 tooltip 的位置、让数据集中显示在min和max之间、设置不强制显示0以及日期显示格式的简化等,以提升用户体验。

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

1、图片自适应重绘
window.onresize = function () {
	myChart.resize(); //使第一个图表适应
}
2、鼠标在左边tooltip在右边
tooltip : {
	trigger : 'axis',
	position: function (pos, params, dom, rect, size) {// 鼠标在左侧时 tooltip 显示到右侧,鼠标在右侧时 tooltip 显示到左侧。
		var obj = {top: 60};
		obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 5;
		return obj;
	}
},

3、保存图片问题

toolbox: {
	show: true,
	feature: {
		saveAsImage: {
			show: true
		}
	}
},
----------------------------------------------------------------------------

2017.8.14更新

鼠标在左tooltip在右边这段可以直接设置为

confine : true

此项配置非常非常非常有用,比上面的配置2更加实用,因为配置2实测焦点离鼠标点击位置太远,用户体验不好。

----------------------------------------------------------------------------

2017.8.22更新

4、让数据集中显示在min和max之间

function getNew(a){
	var b = [];
	for(var i = 0; i <= a.length-1; i++){ 
		if(a[i]) {
			b.push(parseFloat(a[i]));
		}
	}
	return b;
}
function max(b){
	var a = getNew(b);
	var max = a[0];
	var len = a.length;
	for (var i = 0; i <= len-1; i++){ 
		if(!a[i]) continue;
		if (a[i] > max){ 
			max = a[i]; 
		} 
	} 
	return max;
}
function min(b){
	var a = getNew(b);
	var min = a[0];
	var len = a.length;
	for (var i = 0; i <= len-1; i++){ 
		if(!a[i]) continue;
		if (a[i] < min){ 
			min = a[i]; 
		} 
	} 
	return min;
}
/**
 * 取两个数组中最大值和最小值并将之差除以5,返回另一个数组
 * @param a
 * @param b
 * @returns {Array}
 */
function compareArr(a,b){
	var c = [];
	c.push(format(max(a)));
	c.push(format(min(a)));
	c.push(format(max(b)));
	c.push(format(min(b)));
	var d = (max(c) - min(c))/5;
	if(max(c) && min(c)){
		var m = parseFloat(max(c)) + d;
		var n = parseFloat(min(c)) - d;
		return new Array(m.toFixed(2),n.toFixed(2));
	}else return new Array('','');
}
在图表中需要设置最大值和最小值的地方调用

			var m = comArr(yCdata);
			var max = m[0];
			var min = m[1];

并在相应的需要设置的最大值和最小值得地方配置max和min

-------------------------------------------------------------------------

2017.8.28更新

5、让数据集中显示,不需要设置最大最小值,只需设置不强制显示0

scale :true,

-------------------------------------------------------------------------

2017.9.6更新

6、日期显示格式精简化,只在第一个日期前加上年份,其他日期去掉年份和多余的0显示

formatter: function (value, index) {
                	    // 格式化成月/日,只在第一个刻度显示年份
                	    var date = new Date(value);
                	    var texts = [(date.getMonth() + 1), date.getDate()];
                	    if (index === 0) {
                	        texts.unshift(date.getFullYear());
                	    }
                	    return texts.join('/');
                	}
7、使图像平滑显示

scale: true,
8、完整实例

function drawCharts(xdata, yAdata, yBdata, yCdata, yDdata, strA, strB, strC, strD) {
    	var i,
    		len = xdata.length,
    		xdatas = [];
    	for(i = 0; i < len; ++i){
    		xdatas[i] = xdata[i].replace(/-/g, ",");
    	}
    	xdata = xdatas;
        var myChart = echarts.init(document.getElementById('echartsContainer'));
        myChart.setOption({}, true);
        myChart.setOption(option = {
            legend: {
                data: [strA, strB]
            },
            tooltip: {
                trigger: 'axis',
                confine: true
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: xdata.map(function (str) {
                    return str.replace(' ', '\n')
                }),
                axisLabel: {
                	formatter: function (value, index) {
                	    // 格式化成月/日,只在第一个刻度显示年份
                	    var date = new Date(value);
                	    var texts = [(date.getMonth() + 1), date.getDate()];
                	    if (index === 0) {
                	        texts.unshift(date.getFullYear());
                	    }
                	    return texts.join('/');
                	}
                }
            },
            yAxis:
                [
                    {
                        type: 'value',
                        scale: true,
                        position: 'left'
                    },
                    {
                        type: 'value',
                        scale: true,
                        position: 'right'
                    }
                ],
            series: [
                {
                    name: strA,
                    type: 'line',
                    smooth:true,  
                    stack: '总量',
                    data: yAdata
                },
                {
                    name: strB,
                    type: 'line',
                    yAxisIndex: 1,
                    smooth: true,
                    symbol: 'none',
                    sampling: 'average',
                    itemStyle: {
                        normal: {
                            color: 'rgb(255, 70, 151)'
                        }
                    },
                    areaStyle: {
                        normal: {
                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                offset: 0,
                                color: 'rgb(255, 158, 68)'
                            }, {
                                offset: 1,
                                color: 'rgb(255, 70, 131)'
                            }])
                        }
                    },
                    data: yBdata
                }
            ]
        });
        var myChart1 = echarts.init(document.getElementById("echartsContainer1"));
        myChart1.setOption({}, true);
        myChart1.setOption(option = {
            title: {},
            tooltip: {
                trigger: 'axis',
                confine: true
            },
            legend: {
                data: [strC]
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: xdata.map(function (str) {
                    return str.replace(' ', '\n')
                }),
                axisLabel: {
                	formatter: function (value, index) {
                	    // 格式化成月/日,只在第一个刻度显示年份
                	    var date = new Date(value);
                	    var texts = [(date.getMonth() + 1), date.getDate()];
                	    if (index === 0) {
                	        texts.unshift(date.getYear());
                	    }
                	    return texts.join('/');
                	}
                }
            },
            yAxis: {
                name: '价格(元)',
                scale: true,
                type: 'value',
                position: 'left'
            },
            series: {
                name: strC,
                type: 'line',
                smooth:true,  
                stack: '总量',
                itemStyle: {
                    normal: {
                        color: '#E01F54',
                        lineStyle: {
                            color: '#E01F54'
                        }
                    }
                },
                data: yCdata
            },
        });
        var myChart2 = echarts.init(document.getElementById("echartsContainer2"));
        myChart2.setOption({}, true);
        myChart2.setOption(option = {
            title: {},
            tooltip: {
                trigger: 'axis',
                confine: true
            },
            legend: {
                data: [strD]
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: xdata.map(function (str) {
                    return str.replace(' ', '\n')
                }),
                axisLabel: {
                	formatter: function (value, index) {
                	    var date = new Date(value);
                	    var texts = [(date.getMonth() + 1), date.getDate()];
                	    if (index === 0) {
                	        texts.unshift(date.getYear());
                	    }
                	    return texts.join('/');
                	}
                }
            },
            yAxis: {
                name: '价格(元)',
                scale: true,
                type: 'value',
                position: 'left'
            },
            series: {
                name: strD,
                type: 'line',
                smooth:true,  
                stack: '总量',
                itemStyle: {
                    normal: {
                        color: '#E01F54',
                        lineStyle: {
                            color: '#E01F54'
                        }
                    }
                },
                data: yDdata
            },
        });
        window.onresize = function () {
            var t = setTimeout(function () {
            	$('#searchbar').css('width', $('#body_container_right').innerWidth());
                myChart.resize();
                myChart1.resize();
                myChart2.resize();
            }, 300);
        };
    }








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fullstack_lth

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

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

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

打赏作者

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

抵扣说明:

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

余额充值