echarts多坐标轴分组问题

具体图形就是条形图,柱状图,折线图等图形了,想要实现类似下面图片一样的效果。目前也只是实现一部分效果,还没有达到自己想要的要求。工作中遇到的问题,涉及的东西比较多,不能贴出全部内容,具体的需要细聊,欢迎交流。

140541_smdA_3743353.png

1.调节多轴间距(实现不等轴间距)

因为每个轴与轴之间的距离是固定的,对于长短不同的刻度名看起来不美观。因此尝试过刻度名最大长度适应,即轴上最长的刻度名有多长,轴间距就多长,要避免覆盖到另一条轴上,但是开发过程中表达式未解决全部情况,只适用一部分。最终暂时这么改了,限定刻度名长度为3,超过显示...;

y轴axisLabel:

formatter:function(value){
		  if(value.length > 3){
			 value = value.substring(0,3) + '...';
			}
			return value;
		 }

2.分组:

边框——axisLine,axisTick中length

数据——如果没有数据赋值,否则找已经插入的数据,如果没有找到直接插入,找到就进行比较。判断当前轴是否是最后一个维度,然后进行比较,最后一个元素和下一个插入的相等,则加前缀,否则直接加入。因为有前缀,下次比较会受干扰,正则判断是否含有前缀并截取。

var dimension_length =  all_dimensionality.length <= 0 ? 1 : all_dimensionality.length;
	for(var k = 0;k < dimension_length;k++){
		if(!dimensionality_show_data[k]){				
			dimensionality_show_data[k] = [aData[all_dimensionality[k]]];
		}else{
			var index = dimensionality_show_data[k].indexOf(aData[all_dimensionality[k]]);
			if(index == -1){
				dimensionality_show_data[k].push(aData[all_dimensionality[k]]);
			}else if(index != -1){
				if(all_dimensionality[dimensionality_show_data.length - 1] != all_dimensionality[k]){
					var lastVal = dimensionality_show_data[k][dimensionality_show_data[k].length-1];
					if(/YZYPD/.test(lastVal)){
						lastVal = lastVal.split("YZYPD")[1];
					}
					if(lastVal == aData[all_dimensionality[k]]){
						dimensionality_show_data[k].push("YZYPD"+ aData[all_dimensionality[k]]);
					}else{
						dimensionality_show_data[k].push(aData[all_dimensionality[k]]);
					}
				}else{
					dimensionality_show_data[k].push(aData[all_dimensionality[k]]);
				}
			}

		}
	}

3.interval---通过回调函数实现间隔显示以及过滤数据

var len = opp.xAxis[j].data.length;

var len = opp.xAxis[j].data.length;
opp.xAxis[j].axisTick.interval = function(index,value){
	if(index % 2 == 0 && len > 10) {
		return !/^YZYPD/.test(value)
	}else if(len < 10){
		return value;
	}else{
		return '';
	}

};
opp.xAxis[j].axisLabel.interval = function(index,value){
	if(index % 2 == 0 && len > 10) {
		return !/^YZYPD/.test(value)
	}else if(len < 10){
		return value;
	}else{
		return '';
	}
};

 

转载于:https://my.oschina.net/GracefulTing/blog/1619020

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个详细的例子: 假设我们有这样一组数据: ```javascript const data = [ { x: 1, y: 2, group: 'A' }, { x: 2, y: 4, group: 'A' }, { x: 3, y: 1, group: 'A' }, { x: 4, y: 3, group: 'B' }, { x: 5, y: 5, group: 'B' }, { x: 6, y: 2, group: 'B' }, { x: 7, y: 4, group: 'C' }, { x: 8, y: 1, group: 'C' }, { x: 9, y: 3, group: 'C' }, ]; ``` 其中,`x` 和 `y` 分别表示散点的横纵坐标,`group` 表示散点所属的分组。 我们可以使用 echarts 中的 `dataset` 和 `series` 配置项来实现对横坐标进行分组后添加备注: ```javascript option = { dataset: { source: data, // 按照 group 字段进行分组 dimensions: ['x', 'y', 'group'], // 将分组后的数据按照 group 字段进行排序 transform: { type: 'sort', config: { dimension: 'group', order: 'asc' } } }, xAxis: { // 使用类目轴 type: 'category', // 按照 group 字段进行分组后的类目轴数据 data: echarts.util.map(data, item => item.group), }, yAxis: { type: 'value' }, series: [{ type: 'scatter', // 使用 dataset 中的数据源 datasetIndex: 0, // 横坐标使用 x 字段,纵坐标使用 y 字段 encode: { x: 'x', y: 'y' }, // 对每个分组进行单独的配置 dimensions: ['group'], // 配置每个分组的样式 itemStyle: { // 分组 A 的样式 0: { color: 'red' }, // 分组 B 的样式 1: { color: 'blue' }, // 分组 C 的样式 2: { color: 'green' } }, // 配置每个散点的标签 label: { show: true, // 使用 dataset 中的数据源 formatter: '{b}: ({c})', // 横坐标和纵坐标都使用 encode 中指定的字段 position: 'top', // 配置每个分组的标签样式 // 这里只配置了分组 A 的标签样式,其他分组的样式可以类似地配置 rich: { 0: { backgroundColor: 'rgba(255, 0, 0, 0.5)', padding: [3, 5], borderRadius: 3, color: '#fff' } } } }] }; ``` 这段代码中,我们使用 `dataset` 配置项将数据源设置为 `data`,并指定 `dimensions` 为 `[x, y, group]`,这样 echarts 就会按照 `group` 字段进行分组。 然后我们将 x 轴的类型设置为 `category`,并将 x 轴的数据设置为分组后的类目轴数据,这样就实现了对横坐标进行分组。 接着,我们在 `series` 中配置散点图,并将数据源设置为 `datasetIndex: 0`,这样 echarts 就会使用我们分组后的数据源。 我们还可以通过 `dimensions` 配置项来为每个分组单独配置样式,比如将分组 A 的散点颜色设置为红色,分组 B 的散点颜色设置为蓝色,分组 C 的散点颜色设置为绿色。 最后,我们可以使用 `label` 配置项来为每个散点添加标签,这里我们使用 `{b}: ({c})` 来显示散点所属的分组和散点的值,然后又通过 `rich` 配置项来为每个分组单独配置标签样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值