echarts.js折线图-饼图,及点击联动功能

上图为完成后的图表,当点击右侧折线图的数据点时,左侧饼图的数据会通过ajax重新载入,以达到联动的功能。

1.使用echarts插件:

echarts官方教程传送门:echarts官方教程

2.饼图的配置项:

option1 = {
						tooltip : {//鼠标放上去时提示属性
							trigger : 'item',
							formatter : "{a} <br/>{b} : {c}万元 ({d}%)"//提示的格式
						},
						legend : {//图例
							orient : 'horizontal',
							bottom : 'bottom',
							align : 'left',
							itemWidth : 14,
							data : legendData
						},
						series : [//饼图
						{
							name : '存款余额',
							type : 'pie',
							radius : '68%',
				                        selectedMode: 'single',//只能单项选中
				                        selectedOffset:'10',
							label : {
								normal : {
									show : false//是否显示外侧图例
								}
							},
							center : [ '40%', '40%' ],
							data : seriesData,
							itemStyle : {
								normal : {
									borderWidth: 0,//饼图各区域之间的间隔
					                borderColor: '#ffffff',
									color : function(params) {
										//定义一个颜色数组 
										var colorList = [ '#1D8FFF', '#FB4C50',
												'#FFA72F', '#EDE441',
												'#A9D051', '#1CCBE3',
												'#8B0000', '#DA70D6' ];
										return colorList[params.dataIndex]
									}
								},
								emphasis : {
									shadowBlur : 10,
									shadowOffsetX : 0,
									shadowColor : 'rgba(0, 0, 0, 0.5)'
								}
							}
						} ]
					};

3.折线图配置项:

var option = {
						title : {
							text : '月份存款余额折线图'
						},
						tooltip : {
							trigger : 'axis',//坐标轴触发
							formatter : "{a}年 <br/>{b}月 : {c} (亿元)"
						},
						legend : {
							show : true,
							data : [ '2017' ]
						},
						grid : {
							containLabel : true//防止标签溢出
						},
						xAxis : {
							name : "月份",
							axisLabel : {
								interval : 0//坐标轴刻度标签的显示间隔
							},
							boundaryGap : false,//标签和数据点是否显示在两个刻度之间。
							type : 'category',//类型:类目轴
							data : nameData2
						},
						yAxis : {
							name : "余额(亿元)",
							min : 0,
							max : 500,
							type : 'value'//类型:数值轴
						},
						series : [ {
							data : valueData2,
							type : 'line',//折线/面积图
							name : '2017'
						} ]
					};

注意:折线图的legend.data[i]属性与series[i].name要一致,否则图例及功能不能正常工作

4.点击折线图数据点事件:

		myChart2.on("click", function(param) {//点击折线图时饼图联动
			var ajax = new Ajax("GET_CKYEJGT01", function(data) {
				if (data) {
					option1.legend.data = [];
					option1.series[0].data = [];
					var row = data.dataset.rows[0];
					var legendData = row.legendData;
					var nameData = row.nameData;
					var valueData = row.valueData;
					var month = row.month;//月份
					var year = row.year;//年份
					if (0 == year||0== month) {
						jQuery("#tip").text("当前日期存款余额:")
					} else {
						jQuery("#tip").text(year + "年" + month + "月存款余额:")
					}
					var sumbal = row.sumData;//总余额
					jQuery("#mybankpapp").text(sumbal + "万元");

					var seriesData = [];
					for (var len = 0; len < nameData.length; len++) {
						seriesData.push({
							name : nameData[len],
							value : valueData[len]
						});
					}
					option1.legend.data = legendData;
					option1.series[0].data = seriesData;
					myChart1.clear();
					myChart1.setOption(option1, true);//多次加载option默认是合并的,所以需要加true
				}
			});
			ajax.add("month", param.name);
			ajax.add("year", param.seriesName);
			ajax.submit();
		});

实际上是点击折线图数据点时将饼图数据清空,然后放入新的数据。

5.数据格式:

饼图及折线图配置项的legend.data、折线图的series.data均为普通数组,饼图的series.data为二维数组[[name1,name2,name3],[value1,value2,value3]]。


  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
折线图饼图之间的联动也比较困难,因为它们的数据结构和呈现方式不同。折线图通常用于呈现连续的数据变化趋势,而饼图则用于呈现离散的数据比例。因此,它们之间的交互方式和联动方式也不同。 但是,如果您非常需要在一个div中实现折线图饼图联动,可以尝试以下步骤: 1. 创建折线图:在div中创建一个echarts实例,然后使用option配置项设置折线图数据和样式。 ```javascript var myChart = echarts.init(document.getElementById('chart')); var option = { title: { text: '折线图饼图联动示例' }, tooltip: {}, legend: { data: ['销量'] }, xAxis: { data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }, yAxis: {}, series: [{ name: '销量', type: 'line', data: [5, 20, 36, 10, 10, 20, 5] }] }; myChart.setOption(option); ``` 2. 创建饼图:在同一个div中创建另一个echarts实例,然后使用option配置项设置饼图数据和样式。 ```javascript var myPieChart = echarts.init(document.getElementById('pie-chart')); var pieOption = { title: { text: '饼图' }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, legend: { orient: 'vertical', left: 10, data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }, series: [{ name: '销量', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold' } }, labelLine: { show: false }, data: [{ value: 5, name: '周一' }, { value: 20, name: '周二' }, { value: 36, name: '周三' }, { value: 10, name: '周四' }, { value: 10, name: '周五' }, { value: 20, name: '周六' }, { value: 5, name: '周日' }] }] }; myPieChart.setOption(pieOption); ``` 3. 实现联动:在折线图中添加一个dataZoom组件,然后在dataZoom中添加一个回调函数,用来获取当前的缩放范围。接着,在回调函数中,使用getConnectedDataURL方法获取饼图的图片数据,然后使用setOption方法来更新饼图的显示。 ```javascript myChart.on('dataZoom', function(params) { var startValue = option.xAxis.data[Math.round(params.start)]; var endValue = option.xAxis.data[Math.round(params.end)]; var newData = []; for (var i = 0; i < pieOption.series[0].data.length; i++) { if (pieOption.series[0].data[i].name >= startValue && pieOption.series[0].data[i].name <= endValue) { newData.push(pieOption.series[0].data[i]); } } var pieDataUrl = myPieChart.getConnectedDataURL({ type: 'png' }); option.graphic = [{ id: 'pie', type: 'image', right: '10%', top: 'center', z: -10, bounding: 'raw', origin: [myChart.getWidth() - 30, myChart.getHeight() / 2], style: { image: pieDataUrl, width: 100, height: 100 } }]; myChart.setOption(option); }); ``` 在这个例子中,我们使用dataZoom组件来实现折线图饼图联动。当用户在折线图中缩放时,dataZoom会触发一个事件,然后我们可以在回调函数中获取当前的缩放范围,然后根据这个范围来更新饼图数据。最后,使用getConnectedDataURL方法获取饼图的图片数据,然后使用setOption方法来更新饼图的显示。 需要注意的是,这种方式并不是真正的联动,而是将饼图的图片数据嵌入到折线图中,不具备交互性。如果您需要真正的联动效果,建议将折线图饼图分别放在不同的div中,然后使用事件和回调函数来实现它们之间的联动

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值