ECharts+springboot实现大五人格心理测评数据雷达图展示

机缘

在上次完成大五人格网页端实现后,我想对系统进行更新迭代,让数据展示变得更加具象,因此我想到了使用阿帕奇下面的ECharts来实现我的需求。ECharts功能十分强大,可以提供各种绘图接口。


 效果图

雷达图界面: 

总控界面:


实现步骤

1、引入依赖

<script src="../js/vue.js"></script>
    <script src="../js/axios.js"></script>
    <script src="/js/element-ui/lib/index.js"></script>
    <script src="../js/echarts.js"></script>

2、添加作用域

<div id="app" style="width: 600px;height:400px;">

3、撰写vue,定义数据结构

 let app=new Vue({
        el:"#app",
        data: {
        //这是ECharts所需的数据结构
          option: {
                title: {
                    text: ''
                },
                tooltip: {
                    trigger: 'axis'
                },
                legend: {
                    left: 'center',
                    data: [
                        'personality standard',
                        'personality interviewee',
                        'animal interviewee'
                    ]
                },
                radar: [
                    {
                        indicator: [
                            { text: 'tiger', max: 30 },
                            { text: 'peacock', max: 30 },
                            { text: 'koala', max: 30 },
                            { text: 'owl', max: 30 },
                            { text: 'chameleon', max: 30 }

                        ],
                        center: ['25%', '40%'],
                        radius: 80
                    },
                    {
                        indicator: [
                            { text: 'extraversion', max: 20 },
                            { text: 'agreeableness', max: 20 },
                            { text: 'seriousness', max: 20 },
                            { text: 'neuroticism', max: 20 },
                            { text: 'experienceopenness', max: 20 }

                        ],
                        center: ['75%', '40%'],
                        radius: 80
                    },

                ],
                series: [
                    {
                        type: 'radar',
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [

                            {
                                value: [0, 0, 0, 0,0],
                                name: 'animal interviewee'
                            }
                        ]
                    },
                    {
                        type: 'radar',
                        radarIndex: 1,
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [
                            {
                                value: [13, 16, 13.5, 10,15],
                                name: 'personality standard'
                            },
                            {
                                value: [0, 0, 0, 0,0],
                                name: 'personality interviewee'
                            }
                        ]
                    }

                ]
            },
//这是接收后端数据需要的数据结构
            animal: {
                tiger: 0,
                peacock: 0,
                koala: 0,
                owl: 0,
                chameleon: 0,
                personalityHandled: {
                    extraversion: 0,
                    agreeableness: 0,
                    seriousness: 0,
                    neuroticism: 0,
                    experienceopenness: 0,
                }
            },
        },

}

4、在vue内添加请求方法,并在请求成功后把数据出具处理并放入ECharts中

  let app=new Vue({
        el:"#app",
        data: {
          option: {
                title: {
                    text: ''
                },
                tooltip: {
                    trigger: 'axis'
                },
                legend: {
                    left: 'center',
                    data: [
                        'personality standard',
                        'personality interviewee',
                        'animal interviewee'
                    ]
                },
                radar: [
                    {
                        indicator: [
                            { text: 'tiger', max: 30 },
                            { text: 'peacock', max: 30 },
                            { text: 'koala', max: 30 },
                            { text: 'owl', max: 30 },
                            { text: 'chameleon', max: 30 }

                        ],
                        center: ['25%', '40%'],
                        radius: 80
                    },
                    {
                        indicator: [
                            { text: 'extraversion', max: 20 },
                            { text: 'agreeableness', max: 20 },
                            { text: 'seriousness', max: 20 },
                            { text: 'neuroticism', max: 20 },
                            { text: 'experienceopenness', max: 20 }

                        ],
                        center: ['75%', '40%'],
                        radius: 80
                    },

                ],
                series: [
                    {
                        type: 'radar',
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [

                            {
                                value: [0, 0, 0, 0,0],
                                name: 'animal interviewee'
                            }
                        ]
                    },
                    {
                        type: 'radar',
                        radarIndex: 1,
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [
                            {
                                value: [13, 16, 13.5, 10,15],
                                name: 'personality standard'
                            },
                            {
                                value: [0, 0, 0, 0,0],
                                name: 'personality interviewee'
                            }
                        ]
                    }

                ]
            },
            animal: {
                tiger: 0,
                peacock: 0,
                koala: 0,
                owl: 0,
                chameleon: 0,
                personalityHandled: {
                    extraversion: 0,
                    agreeableness: 0,
                    seriousness: 0,
                    neuroticism: 0,
                    experienceopenness: 0,
                }
            },
        },
        methods:{
            findAnimalById(id){
                axios.get("http://localhost:8080/container/id/"+id)
                    .then(resp =>{
                        if(resp.data.code===20041){
                            this.animal= resp.data.data;
                            this.$message({
                                showClose: true,
                                message: '查询成功',
                                type: 'success'

                            });
                            // 设置数据
                            this.option.series[0].data[0].value[0]=this.$data.animal.tiger;
                            this.option.series[0].data[0].value[1]=this.$data.animal.peacock;
                            this.option.series[0].data[0].value[2]=this.$data.animal.koala;
                            this.option.series[0].data[0].value[3]=this.$data.animal.owl;
                            this.option.series[0].data[0].value[4]=this.$data.animal.chameleon;

                            this.option.series[1].data[1].value[0]=this.$data.animal.personalityHandled.extraversion;
                            this.option.series[1].data[1].value[1]=this.$data.animal.personalityHandled.agreeableness;
                            this.option.series[1].data[1].value[2]=this.$data.animal.personalityHandled.seriousness;
                            this.option.series[1].data[1].value[3]=this.$data.animal.personalityHandled.neuroticism;
                            this.option.series[1].data[1].value[4]=this.$data.animal.personalityHandled.experienceopenness;


                            var myChart = echarts.init(document.getElementById('app'));
                            myChart.setOption(app.option);

                        }else {
                            console.log(resp.data);
                            this.$message({
                                showClose: true,
                                message: '查询失败',
                                type: 'error'
                            });
                        }
                    })
            },

        },
        created(){
            // 拿到id
            let id = localStorage.getItem("id");
            // 查询
            this.findAnimalById(id);
        }

    });


收获

1、深刻了解了同步和异步的区别,这在我的的博客《ECharts+springboot项目,前端不显示数据,找错误,找了一下午》中深有体会。

2、框架看懂和会使用还差着十万八千里。


展望

1、我想为这个系统添加简历分析功能,如果有更新迭代了,我将会继续更新系统。

2、我还想在系统增加更多的心理学分析功能,例如职业生涯规划,智商测试等。


全部代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>
    <script src="../js/axios.js"></script>
    <script src="/js/element-ui/lib/index.js"></script>
    <script src="../js/echarts.js"></script>

</head>
<body>
<div id="app" style="width: 600px;height:400px;">

</div>

<script type="text/javascript">

    let app=new Vue({
        el:"#app",
        data: {
          option: {
                title: {
                    text: ''
                },
                tooltip: {
                    trigger: 'axis'
                },
                legend: {
                    left: 'center',
                    data: [
                        'personality standard',
                        'personality interviewee',
                        'animal interviewee'
                    ]
                },
                radar: [
                    {
                        indicator: [
                            { text: 'tiger', max: 30 },
                            { text: 'peacock', max: 30 },
                            { text: 'koala', max: 30 },
                            { text: 'owl', max: 30 },
                            { text: 'chameleon', max: 30 }

                        ],
                        center: ['25%', '40%'],
                        radius: 80
                    },
                    {
                        indicator: [
                            { text: 'extraversion', max: 20 },
                            { text: 'agreeableness', max: 20 },
                            { text: 'seriousness', max: 20 },
                            { text: 'neuroticism', max: 20 },
                            { text: 'experienceopenness', max: 20 }

                        ],
                        center: ['75%', '40%'],
                        radius: 80
                    },

                ],
                series: [
                    {
                        type: 'radar',
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [

                            {
                                value: [0, 0, 0, 0,0],
                                name: 'animal interviewee'
                            }
                        ]
                    },
                    {
                        type: 'radar',
                        radarIndex: 1,
                        tooltip: {
                            trigger: 'item'
                        },
                        data: [
                            {
                                value: [13, 16, 13.5, 10,15],
                                name: 'personality standard'
                            },
                            {
                                value: [0, 0, 0, 0,0],
                                name: 'personality interviewee'
                            }
                        ]
                    }

                ]
            },
            animal: {
                tiger: 0,
                peacock: 0,
                koala: 0,
                owl: 0,
                chameleon: 0,
                personalityHandled: {
                    extraversion: 0,
                    agreeableness: 0,
                    seriousness: 0,
                    neuroticism: 0,
                    experienceopenness: 0,
                }
            },
        },
        methods:{
            findAnimalById(id){
                axios.get("http://localhost:8080/container/id/"+id)
                    .then(resp =>{
                        if(resp.data.code===20041){
                            this.animal= resp.data.data;
                            this.$message({
                                showClose: true,
                                message: '查询成功',
                                type: 'success'

                            });
                            // 设置数据
                            this.option.series[0].data[0].value[0]=this.$data.animal.tiger;
                            this.option.series[0].data[0].value[1]=this.$data.animal.peacock;
                            this.option.series[0].data[0].value[2]=this.$data.animal.koala;
                            this.option.series[0].data[0].value[3]=this.$data.animal.owl;
                            this.option.series[0].data[0].value[4]=this.$data.animal.chameleon;

                            this.option.series[1].data[1].value[0]=this.$data.animal.personalityHandled.extraversion;
                            this.option.series[1].data[1].value[1]=this.$data.animal.personalityHandled.agreeableness;
                            this.option.series[1].data[1].value[2]=this.$data.animal.personalityHandled.seriousness;
                            this.option.series[1].data[1].value[3]=this.$data.animal.personalityHandled.neuroticism;
                            this.option.series[1].data[1].value[4]=this.$data.animal.personalityHandled.experienceopenness;


                            var myChart = echarts.init(document.getElementById('app'));
                            myChart.setOption(app.option);

                        }else {
                            console.log(resp.data);
                            this.$message({
                                showClose: true,
                                message: '查询失败',
                                type: 'error'
                            });
                        }
                    })
            },

        },
        created(){
            // 拿到id
            let id = localStorage.getItem("id");
            // 查询
            this.findAnimalById(id);
        }

    });



</script>



</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海海不怕困难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值