Echarts数据可视化--特殊饼图2

数据可视化开发过程中,经常会遇到比较特殊的图表。现在简单介绍遇到过的特殊饼图-1的做法:

1、HTML代码:

<div class="wrap">
    <div id="echarts"></div>
    <div id="echarts2"></div>
</div>

2、CSS代码:

.wrap {
    height: 800px;
    position: relative;
    width: 800px;
}
#echarts ,#echarts2{
    position: absolute;
    height: 100%;
    left: 0;
    top: 0;
    width: 100%;
}

3、JS代码:

var myChart = echarts.init(document.getElementById('echarts'));
var myChart2 = echarts.init(document.getElementById('echarts2'));
var option = {
    'tooltip': {
        'trigger': 'item',
	'formatter': "{a} <br/>{b}: {c} ({d}%)"
    },
    'series': [
	{
	    'name':'访问来源',
	    'type':'pie',
	    "color": ['#133379', '#e06a17', '#b09710', '#7a5a32', '#22ab39'],
	    'radius': ['45%', '50%'],
	    'avoidLabelOverlap': false,
	    'label': {
		'normal': {
			formatter: function(params, ticket, callback) {
				return '' + params.data['name'] + '\n' + params.data['name'] + '%';
			},
			'show': true,
			'textStyle': {
		             'fontSize': '12',
		             'color': '#000'
		         }
		},
		'emphasis': {
		     'show': true,
		     'textStyle': {
		         'fontSize': '30',
		         'fontWeight': 'bold'
		      }
		 }
	    },
	    'labelLine': {
		'show': true,
		'normal': {
			'lineStyle': {
				'width': 2
			},
			'smooth': 0.2,
			'length': 50,
			'length2': 50
		}
	    },
	    'data':[
		{'value':30, 'name':'流量原因'},
		{'value':20, 'name':'天气原因'},
		{'value':20, 'name':'空管原因'},
		{'value':20, 'name':'机场原因'},
		{'value':10, 'name':'其他原因'}
	    ]
	}
    ]
};
myChart.setOption(option);

// *************************************
var option2 = {
    'title': {
	'text': '',
	'subtext': '',
	'left': 'center',
	'top': '35%',
	'textBaseline': 'top',
	'textStyle': {
		'fontSize': 12,
		'color': '#fff',
		'fontFamily': 'Digiface'
	},
	'subtextStyle': {
		'fontSize': 16,
		'color': '#f3be2c'
	}
    },
    'tooltip': {
	'show': true,
	'position':[0,0],
	'trigger': 'item',
	'formatter': '{b}: {c} ({d}%)'
    },
    'grid': {
	'left': 0,
	'top': 0,
	'bottom': 0,
	'right': 0
    },
    'series': []
};
var staticData = {
	'pieData': 100,
	'traffic': 30,
	'weather': 20,
	'blank': 20,
	'airport': 20,
	'other': 10
};
function makeLabelData(data) {
    let seriesData = {
        'hoverAnimation': true,
	'avoidLabelOverlap': true,
	'name': '计划',
	'type': 'pie',
	'data': [],
	'itemStyle': {
	    'normal': {
	        'borderWidth':2,
	         'borderColor': '#050f33'
	    }
	},
	radius': ['35%', '50%'],
	'label': {
	    'normal': {
	        'position': 'inside',
	        'show':false,
	    }
	}
    };
    let labelData = [];
    if(data.pieData) {
        const totalNum = data.pieData;
	const trafficNum = data.traffic;
	const weatherNum = data.weather;
	const blankNum = data.blank;
	const airportNum = data.airport;
	const otherNum = data.other;
	for (let i = 0; i < 100; i++) {
	    labelData.push({
		'value': 1,
		'name': '计划' ,
		'itemStyle':{
			'normal': {
			'color': "#74778a"
		    }
	        }
	    });
	}
	for (let k = 0; k < trafficNum; k++) {
	    labelData[k] = {
		'value': 1,
		'name': '流量原因' ,
		'itemStyle':{
		    'normal': {
			'color': "#133379"
		    }
		}
	    };
	    seriesData.name = '流量原因';
	}
	for (let j = 0; j < weatherNum; j++) {
            var weatherIndex = trafficNum + j;
	    labelData[weatherIndex] = {
		'value': 1,
		'name': '天气原因' ,
		'itemStyle':{
		    'normal': {
			'color': "#e06a17"
		    }
		}
	    };
	    seriesData.name = '天气原因';
	}
	for (let l = 0; l < blankNum; l++) {
            var blankIndex = trafficNum + weatherNum + l;
	    labelData[blankIndex] = {
	        'value': 1,
	        'name': '空管原因' ,
		'itemStyle':{
		    'normal': {
			'color': "#b09710"
		    }
		}
	    };
	    seriesData.name = '空管原因';
	}
	for (let m = 0; m < airportNum; m++) {
            var airportIndex = trafficNum + weatherNum + blankNum + m;
	    labelData[airportIndex] = {
		'value': 1,
		'name': '机场原因' ,
		'itemStyle':{
		    'normal': {
			'color': "#7a5a32"
		    }
		}
	    };
	    seriesData.name = '机场原因';
	}
	for (let n = 0; n < otherNum; n++) {
	    var otherIndex = trafficNum + weatherNum + blankNum + airportNum + n;
	    labelData[otherIndex] = {
	        'value': 1,
		'name': '其他原因' ,
		'itemStyle':{
		    'normal': {
		        'color': "#22ab39"
		    }
	        }
	    };
	    seriesData.name = '其他原因';
	}
	seriesData.data = labelData;
    }
        console.log(seriesData);
	return seriesData;
}
var seriesData = makeLabelData(staticData);
option2.series.push(seriesData);
myChart2.setOption(option2);

4、效果图:


另外,由于单独用echarts实现,这种效果不太好实现,所以用了两张图叠在了一起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts 是百度开源的一款基于 JavaScript 的数据可视化库,它能够以简单且直观的方式呈现数据,具有交互性和可定制性。 ECharts 支持多种图表类型,如折线图、柱状图、散点图、饼图等,同时还支持地图、热力图、仪表盘等特殊类型的图表。ECharts 还提供了丰富的 API 接口和事件处理机制,使得它可以轻松地与其他前端框架和库进行整合。 在 ECharts 中,我们可以通过使用 JSON 格式的数据源和配置项来实现数据可视化。下面是一个简单的示例,展示如何使用 ECharts 来创建一个简单的柱状图: ```javascript // 引入 ECharts 库 import echarts from 'echarts'; // 初始化图表 const myChart = echarts.init(document.getElementById('myChart')); // 定义数据源 const data = [120, 200, 150, 80, 70]; // 配置图表 const option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] }, yAxis: { type: 'value' }, series: [{ data: data, type: 'bar' }] }; // 渲染图表 myChart.setOption(option); ``` 在上面的示例中,我们首先引入了 ECharts 库,然后通过 `echarts.init` 方法初始化了一个图表。接着,我们定义了一个数据源 `data`,表示每天的销售量。最后,我们通过配置项 `option` 来定义图表的样式数据,包括 x 轴和 y 轴的类型、数据源和柱状图的类型等。最后,我们调用 `myChart.setOption` 方法来渲染图表。 除了基本的柱状图之外,ECharts 还支持多种图表类型和功能,如折线图、饼图、雷达图、地图、热力图等。我们可以通过阅读 ECharts 的官方文档来了解更多的使用方法和示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值