Vue前端,使用echarts图表库

文章目录

    • [1. ECharts官网地址](#1. ECharts官网地址)
    • [2. echarts安装方式](#2. echarts安装方式)
    • [3. 使用柱状图,饼图,折线图](#3. 使用柱状图,饼图,折线图)
    • [4. 运行效果图](#4. 运行效果图)

1. ECharts官网地址

https://echarts.apache.org/handbook/zh/get-started/

2. echarts安装方式

bash 复制代码
npm install echarts

温馨提示:使用npm命令的前提,是必须安装Nodejs

3. 使用柱状图,饼图,折线图

打开官网选择【示例】,然后选择自己所需要的图标,查看demo

  1. 编写布局样式文件
xml 复制代码
        <el-row :gutter="20" style="margin-top: 60px;">
            <el-col :span="8">
                <div class="grid-content4">
                    <div ref="barChart" style="height: 100%;width: 100%;"></div>
                </div>


            </el-col>
            <el-col :span="8">
                <div class="grid-content5">
                    <div ref="pieChart" style="height: 100%;width: 100%;"></div>
                </div>
            </el-col>


            <el-col :span="8">
                <div class="grid-content6">
                    <div ref="lineChart" style="height: 100%;width: 100%;"></div>
                </div>
            </el-col>


        </el-row>
  1. 调用接口获取图表数据(这里忽略接口调用,由后端提供)
javascript 复制代码
queryMedicalRecordByDiseaseData() {
            queryMedicalRecordByDisease().then(res => {
               //获取接口数据后,初始化图表控件,并设置数据
                this.initBarChart(res.data.list);
                this.initPieChart(res.data.list);
                this.initLineChart(res.data.list)
            });
        },
  1. 设置数据
javascript 复制代码
//柱状图
initBarChart(data) {
            // 基于准备好的dom,初始化echarts实例
            const chartDom = this.$refs.barChart;
            const myChart = echarts.init(chartDom);

            // 提取 x 轴数据(疾病名称)和 y 轴数据(人数)
            const xAxisData = data.map(item => item.disease_name);
            const seriesData = data.map(item => item.patient_count);
            const option = {

                title: {
                    text: '高发疾病',
                    subtext: '数据统计',
                    left: 'center'
                },

                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'shadow'
                    }
                },
                grid: {
                    left: '3%',
                    right: '4%',
                    bottom: '3%',
                    containLabel: true
                },
                xAxis: [
                    {
                        type: 'category',
                        data: xAxisData,
                        axisTick: {
                            alignWithLabel: true
                        }
                    }
                ],
                yAxis: [
                    {
                        type: 'value'
                    }
                ],
                series: [
                    {
                        name: '患病人数',
                        type: 'bar',
                        barWidth: '60%',
                        data: seriesData
                    }
                ]
            };
            
            //这句不能少
            myChart.setOption(option);
        },

         //饼图
        initPieChart(data) {
            // 基于准备好的dom,初始化echarts实例
            const chartDom = this.$refs.pieChart;
            const myChart = echarts.init(chartDom);

            // 提取 x 轴数据(疾病名称)和 y 轴数据(人数)
            const xAxisData = data.map(item => item.disease_name);
            const seriesData = this.transformToChartData(data);


            const option = {
                title: {
                    text: '高发疾病',
                    subtext: '数据统计',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    orient: 'vertical',
                    left: 'left'
                },
                series: [
                    {
                        name: '患病人数',
                        type: 'pie',
                        radius: '50%',
                        data: seriesData,
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            
            //这句不能少
            myChart.setOption(option);

        },

        //折线图
        initLineChart(data) {
            
            // 基于准备好的dom,初始化echarts实例
            const chartDom = this.$refs.lineChart;
            const myChart = echarts.init(chartDom);

            // 提取 x 轴数据(疾病名称)和 y 轴数据(人数)
            const xAxisData = data.map(item => item.disease_name);
            const seriesData = data.map(item => item.patient_count);

            const option = {
                 title: {
                    text: '高发疾病',
                    subtext: '数据统计',
                    left: 'center'
                },
                xAxis: {
                    type: 'category',
                    boundaryGap: false,
                    data: xAxisData
                },
                yAxis: {
                    type: 'value'
                },
                series: [
                    {
                        data: seriesData,
                        type: 'line',
                        areaStyle: {}
                    }
                ]

            };
            //这句不能少
            myChart.setOption(option);

        },


        //将数据转换为图表数据格式
        transformToChartData(data) {
            return data.map(item => ({
                value: item.patient_count,
                name: item.disease_name // 使用 disease_name 或 diagnosis_result 作为名称
            }));

        },
  1. 最后别忘了调用setOption
javascript 复制代码
myChart.setOption(option);

温馨提示,由于接口反馈的字段,跟图表所需要的字段肯定不是一致的,所以我们使用list.map方法来转换一下

4. 运行效果图

相关推荐
就是蠢啊6 分钟前
封装/前线修饰符/Idea项目结构/package/impore
java·服务器·前端
小盼江14 分钟前
智能服装推荐系统 协同过滤余弦函数推荐服装 Springboot Vue Element-UI前后端分离
大数据·数据库·vue.js·spring boot·ui·毕业设计
GISer_Jing22 分钟前
React中 Reconciliation算法详解
前端·算法·react.js
呵呵哒( ̄▽ ̄)"27 分钟前
react-quill 富文本组件编写和应用
前端·javascript·react.js
CodeChampion33 分钟前
69.基于SpringBoot + Vue实现的前后端分离-家乡特色推荐系统(项目 + 论文PPT)
java·vue.js·spring boot·mysql·elementui·node.js·mybatis
蔚一1 小时前
运行npm install 时,卡在sill idealTree buildDeps没有反应
前端·spring boot·后端·npm·node.js·vue
豆豆(设计前端)1 小时前
总结 Vue 请求接口的各种类型及传参方式
前端·javascript·vue.js
BestArsenaI1 小时前
vue -关于浏览器localstorge数据定期清除的实现
javascript·vue.js·ecmascript
Smile_Gently2 小时前
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
javascript·vue.js·elementui
一生躺平的仔2 小时前
# Rust遇上WebAssembly:让JavaScript的计算性能起飞!🚀
前端·javascript