基于Echarts实现可视化数据大屏大数据可视化的方法和流程

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 基于Echarts实现可视化数据大屏大数据可视化的方法和流程

随着大数据时代的到来,数据可视化成为一种重要的工具。它将庞大复杂的数据转化成直观、易懂的图形,便于用户快速理解和分析数据。而Echarts是一种优秀的数据可视化工具,能够帮助我们实现各种各样的数据可视化。

本文将详细介绍基于Echarts实现可视化数据大屏大数据可视化的方法和流程,并且给出一个实例进行演示。

Echarts简介

Echarts是由百度前端技术部研发的一款开源的数据可视化工具库。它支持多种图表类型,如折线图、柱状图、饼图、散点图等等。同时,Echarts还提供了丰富的配置项和交互功能,可以帮助我们轻松地实现各种各样的数据可视化。

可视化数据大屏设计思路

在实现可视化数据大屏之前,我们需要先明确设计思路。一般来说,设计一个可视化数据大屏需要考虑以下几点:

1. 数据来源

首先,我们需要明确数据来源。数据可以来自数据库、API接口或其他数据源。

2. 数据处理

数据处理是可视化数据大屏设计的核心。我们需要将原始数据进行加工、过滤和计算,生成需要展示的数据。

3. 页面布局

页面布局包括大屏元素的排布方式、大小、颜色等等。这一点需要根据实际情况进行调整,使得页面看起来简洁明了、美观大方。

4. 图表类型选择

Echarts支持多种图表类型,我们需要根据数据特征选择适合的图表类型进行展示。

5. 交互效果

交互效果能够提高用户体验,并且让用户更好的理解数据。例如,鼠标悬浮时能够显示具体数值、能够缩放和平移图表等等。

实现方法及流程

下面将介绍基于Echarts实现可视化数据大屏大数据可视化的具体方法和流程。

1. 数据准备

首先,我们需要准备数据。数据可以来自数据库、API接口或其他数据源。本文以Mock.js为例来生成模拟数据。

// Mock.js生成随机数据
var data = Mock.mock({
    "data|10": [
        {
            "name|+1": ["张三", "李四", "王五", "赵六", "钱七"],
            "age|18-60": 1,
            "gender|0-1": 1,
            "score|60-100": 1
        }
    ]
});

2. 数据处理

接下来,我们需要对数据进行加工、过滤和计算,生成需要展示的数据。本文以Echarts中的柱状图为例来展示数据。

// 分组统计分数平均值
var seriesData = [];
var legendData = [];
var xAxisData = [];

for (var i = 0; i < data.data.length; i++) {
    var d = data.data[i];
    var name = d.name;
    var score = d.score;

    if (legendData.indexOf(name) == -1) {
        legendData.push(name);
    }

    var index = xAxisData.indexOf(name);
    if (index == -1) {
        xAxisData.push(name);
        seriesData.push(score);
    } else {
        seriesData[index] = (seriesData[index] + score) / 2;
    }
}

3. 页面布局

页面布局包括大屏元素的排布方式、大小、颜色等等。这一点需要根据实际情况进行调整,使得页面看起来简洁明了、美观大方。本文使用Bootstrap框架进行布局。

<div class="container-fluid">
    <div class="row">
        <div class="col-md-6">
            <div id="chart1" style="height: 300px;"></div>
        </div>
        <div class="col-md-6">
            <div id="chart2" style="height: 300px;"></div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <div id="chart3" style="height: 400px;"></div>
        </div>
    </div>
</div>

4. 图表类型选择

Echarts支持多种图表类型,我们需要根据数据特征选择适合的图表类型进行展示。本文使用柱状图、饼图和散点图来展示数据。

// 柱状图
var chart1 = echarts.init(document.getElementById('chart1'));
var option1 = {
    title: {
        text: '分数统计'
    },
    tooltip: {},
    legend: {
        data: ['分数']
    },
    xAxis: {
        data: xAxisData
    },
    yAxis: {},
    series: [{
        name: '分数',
        type: 'bar',
        data: seriesData
    }]
};
chart1.setOption(option1);

// 饼图
var chart2 = echarts.init(document.getElementById('chart2'));
var option2 = {
    title: {
        text: '性别比例'
    },
    tooltip: {
        trigger: 'item',
        formatter: '{a} <br/>{b}: {c} ({d}%)'
    },
    legend: {
        orient: 'vertical',
        x: 'right',
        data: ['男', '女']
    },
    series: [
        {
            name: '访问来源',
            type: 'pie',
            radius: ['50%', '70%'],
            avoidLabelOverlap: false,
            label: {
                normal: {
                    show: false,
                    position: 'center'
                },
                emphasis: {
                    show: true,
                    textStyle: {
                        fontSize: '30',
                        fontWeight: 'bold'
                    }
                }
            },
            labelLine: {
                normal: {
                    show: false
                }
            },
            data: [
                {value: 335, name: '男'},
                {value: 310, name: '女'}
            ]
        }
    ]
};
chart2.setOption(option2);

// 散点图
var chart3 = echarts.init(document.getElementById('chart3'));
var option3 = {
    title: {
        text: '年龄分布'
    },
    xAxis: {
        type: 'value',
        scale: true,
        axisLabel: {
            formatter: '{value} 岁'
        }
    },
    yAxis: {
        type: 'value',
        scale: true,
        axisLabel: {
            formatter: '{value} 分'
        }
    },
    series: [{
        symbolSize: 20,
        data: [[22, 80], [35, 60], [45, 50], [32, 90], [28, 70]],
        type: 'scatter'
    }]
};
chart3.setOption(option3);

5. 交互效果

交互效果能够提高用户体验,并且让用户更好的理解数据。例如,鼠标悬浮时能够显示具体数值、能够缩放和平移图表等等。本文使用Echarts自带的交互功能。

chart1.on('mouseover', function (params) {
    var dataIndex = params.dataIndex;
    var score = seriesData[dataIndex];
    chart1.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: dataIndex,
        name: '分数:' + score
    });
});

chart1.on('mouseout', function (params) {
    chart1.dispatchAction({
        type: 'hideTip',
        seriesIndex: 0
    });
});

chart2.on('mouseover', function (params) {
    var gender = params.name;
    chart2.dispatchAction({
        type: 'highlight',
        name: gender
    });
});

chart2.on('mouseout', function (params) {
    chart2.dispatchAction({
        type: 'downplay',
        name: params.name
    });
});

chart3.on('mouseover', function (params) {
    var age = params.value[0];
    var score = params.value[1];
    chart3.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        position: [params.event.offsetX, params.event.offsetY],
        dataIndex: params.dataIndex,
        name: '年龄:' + age + ' 岁,分数:' + score
    });
});

chart3.on('mouseout', function (params) {
    chart3.dispatchAction({
        type: 'hideTip',
        seriesIndex: 0
    });
});

示例演示

最后,我们来演示一下实现过程。本文采用CDN方式引入Echarts和Bootstrap的CSS和JS文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>可视化数据大屏</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.9.0/echarts.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/mockjs/1.1.0/mock-min.js"></script>
</head>
<body>
    <h1>可视化数据大屏</h1>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6">
                <div id="chart1" style="height: 300px;"></div>
            </div>
            <div class="col-md-6">
                <div id="chart2" style="height: 300px;"></div>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <div id="chart3" style="height: 400px;"></div>
            </div>
        </div>
    </div>

    <script>
        // Mock.js生成随机数据
        var data = Mock.mock({
            "data|10": [
                {
                    "name|+1": ["张三", "李四", "王五", "赵六", "钱七"],
                    "age|18-60": 1,
                    "gender|0-1": 1,
                    "score|60-100": 1
                }
            ]
        });

        // 分组统计分数平均值
        var seriesData = [];
        var legendData = [];
        var xAxisData = [];

        for (var i = 0; i < data.data.length; i++) {
            var d = data.data[i];
            var name = d.name;
            var score = d.score;

            if (legendData.indexOf(name) == -1) {
                legendData.push(name);
            }

            var index = xAxisData.indexOf(name);
            if (index == -1) {
                xAxisData.push(name);
                seriesData.push(score);
            } else {
                seriesData[index] = (seriesData[index] + score) / 2;
            }
        }

        // 柱状图
        var chart1 = echarts.init(document.getElementById('chart1'));
        var option1 = {
            title: {
                text: '分数统计'
            },
            tooltip: {},
            legend: {
                data: ['分数']
            },
            xAxis: {
                data: xAxisData
            },
            yAxis: {},
            series: [{
                name: '分数',
                type: 'bar',
                data: seriesData
            }]
        };
        chart1.setOption(option1);

        // 饼图
        var chart2 = echarts.init(document.getElementById('chart2'));
        var option2 = {
            title: {
                text: '性别比例'
            },
            tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b}: {c} ({d}%)'
            },
            legend: {
                orient: 'vertical',
                x: 'right',
                data: ['男', '女']
            },
            series: [
                {
                    name: '访问来源',
                    type: 'pie',
                    radius: ['50%', '70%'],
                    avoidLabelOverlap: false,
                    label: {
                        normal: {
                            show: false,
                            position: 'center'
                        },
                        emphasis: {
                            show: true,
                            textStyle: {
                                fontSize: '30',
                                fontWeight: 'bold'
                            }
                        }
                    },
                    labelLine: {
                        normal: {
                            show: false
                        }
                    },
                    data: [
                        {value: 335, name: '男'},
                        {value: 310, name: '女'}
                    ]
                }
            ]
        };
        chart2.setOption(option2);

        // 散点图
        var chart3 = echarts.init(document.getElementById('chart3'));
        var option3 = {
            title: {
                text: '年龄分布'
            },
            xAxis: {
                type: 'value',
                scale: true,
                axisLabel: {
                    formatter: '{value} 岁'
                }
            },
            yAxis: {
                type: 'value',
                scale: true,
                axisLabel: {
                    formatter: '{value} 分'
                }
            },
            series: [{
                symbolSize: 20,
                data: [[22, 80], [35, 60], [45, 50], [32, 90], [28, 70]],
                type: 'scatter'
            }]
        };
        chart3.setOption(option3);

        // 悬浮提示
        chart1.on('mouseover', function (params) {
            var dataIndex = params.dataIndex;
            var score = seriesData[dataIndex];
            chart1.dispatchAction({
                type: 'showTip',
                seriesIndex: 0,
                dataIndex: dataIndex,
                name: '分数:' + score
            });
        });

        chart1.on('mouseout', function (params) {
            chart1.dispatchAction({
                type: 'hideTip',
                seriesIndex: 0
            });
        });

        chart2.on('mouseover', function (params) {
            var gender = params.name;
            chart2.dispatchAction({
                type: 'highlight',
                name: gender
            });
        });

        chart2.on('mouseout', function (params) {
            chart2.dispatchAction({
                type: 'downplay',
                name: params.name
            });
        });

        chart3.on('mouseover', function (params) {
            var age = params.value[0];
            var score = params.value[1];
            chart3.dispatchAction({
                type: 'showTip',
                seriesIndex: 0,
                position: [params.event.offsetX, params.event.offsetY],
                dataIndex: params.dataIndex,
                name: '年龄:' + age + ' 岁,分数:' + score
            });
        });

        chart3.on('mouseout', function (params) {
            chart3.dispatchAction({
                type: 'hideTip',
                seriesIndex: 0
            });
        });
    </script>
</body>
</html>

结论

以上便是基于Echarts实现可视化数据大屏大数据可视化的详细方法和流程。通过本文的介绍,我们可以初步了解如何使用Echarts来实现各种各样的数据可视化,并且能够在实践中不断提高自己的技能水平。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
JSON JavaScript 定位技术
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
139 1
|
2月前
|
JavaScript 定位技术
echarts地图数据信息流向图效果
本文介绍了如何使用 ECharts 创建一个地图数据信息流向图效果,包括设置地理坐标、线条动画和流向图的实现方法,并通过 Vue.js 封装了一个可重用的 ECharts 地图组件。
138 23
echarts地图数据信息流向图效果
|
29天前
|
数据采集 机器学习/深度学习 存储
大数据的处理流程
【10月更文挑战第16天】
84 2
|
1月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
63 5
|
26天前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
【10月更文挑战第31天】量子计算凭借其独特的量子比特和量子门技术,为大数据处理带来了革命性的变革。相比传统计算机,量子计算在计算效率、存储容量及并行处理能力上具有显著优势,能有效应对信息爆炸带来的挑战。本文探讨了量子计算如何通过量子叠加和纠缠等原理,加速数据处理过程,提升计算效率,特别是在金融、医疗和物流等领域中的具体应用案例,同时也指出了量子计算目前面临的挑战及其未来的发展方向。
|
1月前
|
JavaScript API
Echarts中单独为每个legend图例设置样式-根据数据正负显示不同样式
通过上述方法,我们便能够在ECharts中根据数据的正负为每个图例项设置不同的样式,增强了图表的可读性和表现力。这种方法虽然略显间接,但不失为一种灵活的解决方案。
72 2
|
1月前
|
消息中间件 存储 分布式计算
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
34 4
|
1月前
|
SQL 分布式计算 大数据
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
55 2
|
1月前
|
消息中间件 缓存 大数据
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
41 3
|
2月前
|
JavaScript
echarts根据上级元素的大小自动更新echarts(element-resize-detector)配合防抖解决大屏页面卡顿的问题
如何在Vue中使用`element-resize-detector`库来自动更新ECharts图表的大小,以适应其上级元素大小的变化,并结合使用防抖技术来解决大屏页面上的卡顿问题。
126 5
下一篇
无影云桌面