vue+elementUI中使用Echarts之饼图问题
作者:橘哥哥
这篇文章主要介绍了vue+elementUI中使用Echarts之饼图问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
vue elementUI使用Echarts之饼图

实现效果如图
老规矩先创建占位子的div
<div id="pieReport" style="width: 400px;height: 300px;"></div>
然后引入Echarts,并且模拟数据
export default {
name: "",
data() {
return {
charts: "",
opinion: ["及格人数", "未及格人数"],
opinionData: [
{ value: 12, name: "及格人数", itemStyle: "#1ab394" },
{ value: 18, name: "未及格人数", itemStyle: "#79d2c0" }
]
};
},
}
在methods中定义方法
drawPie(id) {
this.charts = this.$echarts.init(document.getElementById(id));
this.charts.setOption({
tooltip: {
trigger: "item",
formatter: "{a}<br/>{b}:{c} ({d}%)"
},
legend: {
bottom: 10,
left: "center",
data: this.opinion
},
series: [
{
name: "状态",
type: "pie",
radius: "65%",
center: ["50%", "50%"],
avoidLabelOverlap: false,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)"
},
color: function(params) {
//自定义颜色
var colorList = ["#1ab394", "#79d2c0"];
return colorList[params.dataIndex];
}
},
data: this.opinionData
}
]
});
},
在mounted中调用
mounted() {
this.$nextTick(function() {
this.drawPie("pieReport");
});
}
懒得写了注释了,将就看吧
echarts饼图、柱状图、折线图 切换
最近自学了一下如何运用echarts制作各种图表,首先我是用springboot+mybatis写的后端。
TypeMapper接口中定义方法如下:
/**
* 查询新闻种类以及数量
* @return
*/
List<Map<Object,Object>> list();
配置NewsMapper.xml文件如下:
<select id="list" resultType="java.util.Map">
select count(*) as num,b.type_name as typeName from t_news a,t_type b where a.type_id=b.type_id group by a.type_id
</select>
我这边写了一个连接求和查询语句,返回值类型为Map类型,接下来常规写TypeService和TypeServiceImpl,这里没什么好说的,跟TypeMapper基本一样哈,接下来写控制类NewsController,简要代码如下:
@RestController
public class TypeController {
@Autowired
private ITypeService typeService;
@RequestMapping("/count")
public List<Map<Object,Object>> list(){
List<Map<Object, Object>> list = typeService.list();
return list;
}
}
这里我是通过跨域获取数据,创建一个TypeChart组件,在index.js配置好路由后,开始以下代码!!
<template>
<div class="chart-container">
<div id="chartPie" style="width:100%; height:550px;"></div>
</div>
</template>
<script>
export default {
name: "Typechart",
data() {
return {
chartPie: '',
typeName: [],//新闻类型名称
typeNum: [] //新闻类型数量
}
},
methods: {
drawPieChart() {
// 基于准备好的dom,初始化echarts实例
this.chartPie = this.$echarts.init(document.getElementById("chartPie"));
this.chartPie.setOption({
//设置标题,副标题,以及标题位置居中
title: {
text: '影片统计(饼状图)',
//subtext: '纯属虚构',
x: 'center'
},
//具体点击某一项触发的样式内容
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
//左上侧分类条形符
legend: {
orient: 'vertical',
left: 'left',
//通过跨域获取数据给data赋值
data: []
},
//饼状图类型以及数据源
series: [
{
name: '统计数量',
type: 'pie',
//radius: '70%',
//center: ['50%', '60%'],
//通过跨域获取数据给data赋值
data: [],
//设置饼状图扇形区域的样式
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
}
]
});
},
//动态获取饼状图的数据
async initData() {
//url可以在action.js配置,我是学习期间习惯这样哈哈!!
var url="http://localhost:9090/news/count";
this.axios.post(url,{}).then(res=>{
console.log(res.data);
var getData = [];
//先进行赋值
console.log(res.data.length)
//for循环赋值
for(let i=0; i<res.data.length; i++) {
var obj = new Object();
obj.name = res.data[i].typeName;
obj.value = res.data[i].num;
getData[i] = obj;
}
//然后再给饼状图赋值
this.chartPie.setOption({
legend: {
data: res.data.typeName,
},
series:[{
data: getData,
}]
});
})
},
drawCharts() {
this.drawPieChart();
},
},
//页面一加载就调用方法
mounted () {
//先调用这个方法赋值
this.initData();
//再调用饼状图方法
this.drawCharts();
}
}
</script>
<style scoped>
.chart-container {
width: 100%;
float: left;
}
</style>
先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行。
运行后图如下:

完成啦!!!
柱状图也可以根据上面的方法来写!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
