EChart学习——在日历中插入饼图

第一次使用EChart, 记录一下。

功能:日历控件里面插入饼图,一张饼图有三个部分组成,鼠标移动上去能显示所需要的数据,另外对应的星期,日期,月份都需要显示在图上。


首先去网上找一下例子,大概了解一下EChart

第一步:引用Js,引用Js的时候我遇到了一个问题:我的项目是使用maven管理的,所以我在对应项目的pom.xml文件中写入如下配置:

<dependency>
   <groupId>org.webjars</groupId>
   <artifactId>echarts</artifactId>
    <version>2.2.1</version>
</dependency>
然后在对应项目的Maven Dependencies下面就可以找到对应的jar包了


接着就可以通过“<script src="/webjars/echarts/2.2.1/echarts-all.js"></script>”添加引用了。

网上找个简单的入门,跟这个例子先配置好EChart的环境,确保图能出来再开始做复杂的。

图也出来了,开始做复杂的,把所需要的代码从http://echarts.baidu.com/examples/editor.html?c=calendar-pie里面提取,捣鼓了半天就是不出来,然后我又仔细研究了一下W3C的文档,发现Js文件引用的不一样,好吧,去官网下个echarts.min.js:http://echarts.baidu.com/download.html,然后也是从简单的日历功能开始测,发现都能出来,好哒,引用没问题。

第二步:在饼图里面插入自己所需要的数据,这里可以在官网Demo里面先随意修改测试,充分了解后再做插入。

代码:

<div class="col-xs-6 col-md-offset-3" id="main" style="width:800px; height: 600px;"></div>
$(document).ready(function() {
	$.ajax({
		url : "/*****/getall",
		type: "GET",
		success : function(data){//后端传回来的数据
			var app = {};
			var myChart = echarts.init(document.getElementById('main'));
			option = null;
			var cellSize = [80, 80];
			var pieRadius = 30;
			var startTime =data[0].time;
			var endTime = data[data.length-1].time;
			//中间一堆的逻辑处理我去掉了,重要的是思想
			
			var todaymonth = [];
			todaymonth.push(nowYearMonth);    //给下面的range准备数值,如果你不需要变,可以和官网Demo一样直接‘range: ['2017-02']’

			var personAndRole =  new Array(data.length);  
			for(var i = 0;i < personAndRole.length; i++){  
				personAndRole[i] = new Array(3);    //每行有3列  
			}//定义一个数组,接下来是给数组赋值,我也省略了,突出思想

			function getVirtulData() {
				var start = +echarts.number.parseDate(startTime);
				var end = +echarts.number.parseDate(endTime);				
				var dayTime = 3600 * 24 * 1000;
				var data = [];
				for (var time = start; time <= end; time += dayTime) {
					data.push([
					           echarts.format.formatTime('yyyy-MM-dd', time),
					           Math.floor(Math.random() * 10000),
					           personAndRole    //把自己需要的值也传下去
					]);
				}
				return data;
			}
			function getPieSeries(scatterData, chart) {
				return echarts.util.map(scatterData, function (item, index) {
					var center = chart.convertToPixel('calendar', item);
					return {
						id: index + 'pie',
						type: 'pie',
						center: center,
						label: {
							normal: {
								formatter: '{c}',
								position: 'inside'
							}
						},
						radius: pieRadius,
						data: [
						       {name: item[2][index][0], value: Math.round(1/3 * 24)},    //在这边获取想要的值
						       {name: item[2][index][1], value: Math.round(1/3 * 24)},
						       {name: item[2][index][2], value: Math.round(1/3 * 24)}
						]
					};
			    });
			}
			var scatterData = getVirtulData();
			option = {
					tooltip : {},
					legend: {
						data: ['A', 'B', 'C'],
						bottom: 20
					},
					calendar: {
						top: 'middle',
						left: 'center',
						orient: 'vertical',
						cellSize: cellSize,
						yearLabel: {
							show: false,
							textStyle: {
								fontSize: 30
							}
						},
						dayLabel: {
							margin: 20,
							firstDay: 1,
							nameMap: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
						},
						range: todaymonth
					},
					series: [{
						id: 'label',
						type: 'scatter',
						coordinateSystem: 'calendar',
						symbolSize: 1,
						label: {
							normal: {
								show: true,
								formatter: function (params) {
									return echarts.format.formatTime('dd', params.value[0]);
								},
								offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
								textStyle: {
									color: '#000',
									fontSize: 14
								}
							}
						},
						data: scatterData
					}]
				};
			if (!app.inNode) {
				setTimeout(function () {
					myChart.setOption({
						series: getPieSeries(scatterData, myChart)
					});
				}, 10);
			};
			if (option && typeof option === "object") {
				myChart.setOption(option, true);
			}
			return;
			}		
	});	
});
转载请注明出处,谢谢: https://blog.youkuaiyun.com/Blue___Ocean/article/details/80652510



<think>嗯,用户想在ECharts中实现标签文字环绕效果。我之前看过相关的引用,里面提到了两种方法:一种是旋转每个文字,但可能不太现实;另一种是使用旭日(sunburst)来模拟。用户的问题是关于(pie)的标签环绕,但根据引用[1],旭日的标签支持tangential旋转,这可能是个解决方案。 首先,我需要确认用户的需求是否是严格的,还是可以接受其他表类型的替代。引用[2]提到,当例布局复杂时,可能需要自己定制。而用户的问题是关于标签文字环绕,这可能涉及标签的位置和旋转方式。 在ECharts的官方文档中,的label配置是否有rotate属性?根据引用[3],的label可以通过rich配置来调整样式,但可能不支持tangential旋转。而引用[1]中的示例使用旭日,并设置label.rotate为'tangential',实现了文字环绕效果。这说明旭日可能更适合这种需求。 因此,解决方案可能分为两种:一种是使用旭日模拟,并配置标签的旋转;另一种是尝试在中调整标签的位置和旋转,但可能效果有限。需要详细说明这两种方法的步骤,并给出代码示例。 另外,用户可能需要考虑兼容性和交互性,比如禁用旭日的点击事件,确保它看起来像。同时,调整颜色和边框,使旭日的环形部分透明,只显示标签。引用[1]中的textSeries配置是一个很好的参考,需要将其与的数据结构结合,比如将旭日的数据层级设置为单层。 最后,总结两种方法的优缺点,帮助用户根据实际情况选择。可能还需要提到其他替代方案,比如自定义渲染或使用第三方扩展,但需评估开发成本。</think>在ECharts中实现标签文字环绕效果,可通过以下两种方案实现: ### 方案一:使用旭日(Sunburst)模拟 这是目前实现文字环绕效果的最佳方案,通过`rotate: 'tangential'`参数控制文字沿切线方向旋转: ```javascript option = { series: [{ type:sunburst, radius: [20%, 80%], // 设置环形尺寸 data: [{ name: 'A', value: 30, children: [] // 空子节点保证单层结构 },/* 其他数据项 */], label: { show: true, rotate: 'tangential', // 关键参数:文字沿切线方向旋转 align: 'right', position: 'outside', distance: 30, fontSize: 14, color: '#333' }, itemStyle: { color: 'transparent', // 隐藏形颜色 borderWidth: 0 }, nodeClick: false // 禁用节点点击 }] } ``` 此方案特点: - 文字自动沿外缘切线方向排列[^1] - 支持动态数据更新 - 需要将数据结构转换为旭日格式 ### 方案二:+富文本定制 通过`rich`配置和`padding`参数微调位置: ```javascript series: [{ type: 'pie', radius: ['40%', '70%'], label: { formatter: '{b|{b}}\n{c|{d}%}', rich: { b: { fontSize: 12, align: 'center' }, c: { fontSize: 10, color: '#999' } }, padding: [0, -50], // 控制文字偏移 lineHeight: 20 }, labelLine: { show: true, length2: 50 // 延长引导线 } }] ``` 此方案特点: - 需要手动调整padding值适配不同屏幕 - 文字旋转角度固定 - 兼容性更好但效果较局限[^3]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值