ChatGPT工作提效之数据可视化大屏组件Echarts的实战方案(大数据量加载、伪3D饼图、地图各省cp中心坐标属性、map3D材质)

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: ChatGPT工作提效之数据可视化大屏组件Echarts的实战方案(大数据量加载、伪3D饼图、地图各省cp中心坐标属性、map3D材质)

数据可视化大屏的图表组件,有哪些开源产品?

数据可视化大屏的图表组件,有很多开源产品,主要有以下几种:


  1. ECharts:ECharts 是百度开源的数据可视化库,提供了各种各样的图表类型和丰富的功能,包括折线图、柱状图、散点图、饼图、雷达图、热力图等。
  2. Chart.js:Chart.js 是一个简单灵活的 JavaScript 图表库,支持多种图表类型,包括折线图、柱状图、饼图、散点图等。
  3. D3.js:D3.js 是一个 JavaScript 数据可视化库,提供了丰富的 API,能够创建各种各样的定制化可视化图表。
  4. AntV:AntV 是阿里云的前端可视化解决方案,提供了各种各样的图表类型,包括折线图、柱状图、饼图、散点图等。
  5. Highcharts:Highcharts 是一个 JavaScript 数据可视化库,提供了多种图表类型和交互式功能。
  6. FusionCharts:FusionCharts 是一个基于 Flash 和 JavaScript 的交互式图表库,支持多种图表类型,包括折线图、柱状图、饼图、散点图等。


以上是一些开源的数据可视化大屏图表组件,开发者可以根据项目需求选择合适的组件进行开发。


如何使用Echarts?


要使用 Echarts 进行数据可视化,可以按照以下步骤进行:


1.下载 Echarts:可以在 Echarts 的官网(https://echarts.apache.org/zh/index.html)上下载最新的版本。


2.引入 Echarts 库:在 HTML 页面中引入 Echarts 库的文件,例如:

<script src="echarts.min.js"></script>
  1. 创建一个 DOM 元素:在 HTML 页面中创建一个 DOM 元素,用于显示图表,例如:
<div id="myChart" style="width: 600px;height:400px;"></div>
  1. 初始化 Echarts 实例:在 JavaScript 代码中初始化 Echarts 实例,并设置图表的配置项和数据,例如:
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('myChart'));
// 指定图表的配置项和数据
var option = {
    title: {
        text: 'ECharts 入门示例'
    },
    tooltip: {},
    xAxis: {
        data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    },
    yAxis: {},
    series: [{
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20]
    }]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);


  1. 在网页中显示图表:最后在网页中显示图表即可。

以上就是使用 Echarts 进行数据可视化的基本步骤,具体的图表类型和配置项可以参考 Echarts 的官方文档进行学习和使用。

1.如何加载大数量的折线图?

加载大量的折线图,可以采用 Echarts 提供的大数据量加载方案,即数据分块加载(dataset)和视图区域范围(dataZoom)限制,以避免过多数据的同时提高渲染性能。

下面是一个加载大量的折线图的基本代码:

// 数据分块加载(dataset)
var data = [...]; // 数据数组
var option = {
    dataset: {
        source: data,
        // 每次渲染的数据量
        dimensions: ['日期', '数值'],
        sourceHeader: false
    },
    // 视图区域范围(dataZoom)
    dataZoom: [
        {
            type: 'slider',   // 滑动条形式
            xAxisIndex: 0,    // 设置 dataZoom 组件控制的 x轴
            start: 0,         // 起始位置
            end: 50           // 结束位置
        }
    ],
    // 折线图配置项
    series: [
        {
            type: 'line',
            encode: {
                x: 0,  // 指定数据的维度作为 x 轴
                y: 1   // 指定数据的维度作为 y 轴
            }
        }
    ]
};
// 初始化 Echarts 实例
var myChart = echarts.init(document.getElementById('main'));
// 使用刚指定的配置项和数据显示图表
myChart.setOption(option);


上面代码中的 data 数组存储了大量的数据,通过 dataset 配置项实现了数据分块加载,每次渲染一定数量的数据,避免了一次性渲染大量数据导致的性能问题。通过 dataZoom 配置项实现视图区域范围限制,只渲染指定区域范围内的数据。


如果需要动态加载数据,可以结合 Echarts 提供的 ajax 动态获取数据方案进行:

// 初始化 Echarts 实例
var myChart = echarts.init(document.getElementById('main'));
// 大量数据的折线图配置项
var option = {
    dataset: {
        source: [],   // 初始数据为空
        dimensions: ['日期', '数值'],
        sourceHeader: false
    },
    dataZoom: [
        {
            type: 'slider',
            xAxisIndex: 0,
            start: 0,
            end: 50
        }
    ],
    series: [
        {
            type: 'line',
            encode: {
                x: 0,
                y: 1
            }
        }
    ]
};
// 使用刚指定的配置项和数据显示图表
myChart.setOption(option);
// ajax 获取数据
$.ajax({
    url: 'data.json',
    dataType: 'json',
    success: function(res) {
        // 更新数据
        myChart.setOption({
            dataset: {
                source: res   // 更新数据为 ajax 获取到的数据
            }
        });
    }
});


上面的代码中,通过 ajax 获取数据,更新数据并动态更新大量的折线图。

2.如何在echart中实现伪3D的饼图效果?

要在 Echarts 中实现伪3D的饼图效果,可以通过以下步骤进行:

  1. 引入 Echarts 库:在 HTML 页面中引入 Echarts 库的文件,例如:
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.2/echarts.min.js"></script>
  1. 创建一个 DOM 元素:在 HTML 页面中创建一个 DOM 元素,用于显示图表,例如:
<div id="myChart" style="width: 600px; height: 400px"></div>


  1. 初始化 Echarts 实例:在 JavaScript 代码中初始化 Echarts 实例,并设置图表的配置项和数据,例如:
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('myChart'));
// 设置图表的配置项和数据
var option = {
    tooltip: {
        trigger: 'item',
        formatter: '{b}: {c} ({d}%)'
    },
    series: [
        {
            name: '访问来源',
            type: 'pie',
            radius: ['50%', '70%'],
            avoidLabelOverlap: false,
            label: {
                show: false,
                position: 'center'
            },
            emphasis: {
                label: {
                    show: true,
                    fontSize: '30',
                    fontWeight: 'bold'
                }
            },
            labelLine: {
                show: false
            },
            data: [
                {value: 335, name: '直接访问'},
                {value: 310, name: '邮件营销'},
                {value: 234, name: '联盟广告'},
                {value: 135, name: '视频广告'},
                {value: 1548, name: '搜索引擎'}
            ]
        }
    ]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);


  1. 设置饼图的 3D 效果:在上述代码中,通过在 series 中的 itemStyle 中设置 depth 属性,可以实现饼图的 3D 效果。同时需要添加 coordinateSystem 属性,以指示该系列属于哪个坐标系,例如:
series: [
    {
        name: '访问来源',
        type: 'pie',
        coordinateSystem: 'polar',  // 指定坐标系为极坐标系
        radius: ['50%', '70%'],
        avoidLabelOverlap: false,
        label: {
            show: false,
            position: 'center'
        },
        emphasis: {
            label: {
                show: true,
                fontSize: '30',
                fontWeight: 'bold'
            }
        },
        labelLine: {
            show: false
        },
        itemStyle: {  // 3D 效果设置
            normal: {
                borderWidth: 5,
                borderColor: '#fff',
                opacity: 0.8,
                shadowBlur: 5,
                shadowOffsetX: 0,
                shadowOffsetY: 3,
                shadowColor: 'rgba(0, 0, 0, 0.3)',
                depth: 50  // 3D 效果的深度
            }
        },
        data: [
            {value: 335, name: '直接访问'},
            {value: 310, name: '邮件营销'},
            {value: 234, name: '联盟广告'},
            {value: 135, name: '视频广告'},
            {value: 1548, name: '搜索引擎'}
        ]
    }
]


  1. 在网页中显示图表:最后在网页中显示图表即可。

上述代码中的 depth 属性值可以根据实际情况进行设置,以达到适当的 3D 效果效果。

3.如何获取中国地图geojson属性中每个省的cp属性(中心坐标)

在 Echarts 中,可以通过 geo 组件加载地图数据,而中国地图的 geoJSON 数据默认包含了各个省份的边界数据,以及其他属性,例如各省的 cp 属性用于设置省份地图的中心坐标。


可以通过先加载中国地图的 geoJSON 数据,然后使用 echarts.util.mapData.params 方法获取各省的 cp 属性数据,对应的省份数据索引与中国地图 geoJSON 数据的 features 数组下标一一对应。


如需获取各省 cp 属性数据,可以按照以下步骤进行:


  1. 加载中国地图的 geoJSON 数据,例如:
$.getJSON('./china.json', function (chinaJson) {
  echarts.registerMap('china', chinaJson);
  // 进行其他操作...
});


  1. 获取各省的 cp 属性数据,例如:
var params = echarts.util.mapData.params('china');
var coordinates = params.rawFeatures.map(function (feature) {
    // return feature.properties.cp;
    return feature.attributes.cp; // echarts 5.x 需要使用 attributes 属性
});
console.log(coordinates);


在上述代码中,echarts.util.mapData.params 会返回包含中国地图各省数据的信息对象,其中 rawFeatures 数组包含了各省的坐标数据以及其他属性数据,例如 cp 属性。使用 map 方法将各省的 cp 属性数据存入 coordinates 数组中,以便后续使用。


注意:在 Echarts 5.x 中,需要使用 attributes 属性获取各个省份的 cp 值。如果使用 properties 属性,在控制台中会出现 “Uncaught TypeError: Cannot read properties of undefined (reading ‘properties’)” 错误。


4.如何在echarts中实现map3D的材质功能

在 Echarts 中实现 map3D 地图的材质功能,需要按照以下步骤进行:

  1. 为地图数据添加高程信息

geoJSON 数据中,地理信息数据只包含各个省市的边界信息,需要通过高程数据获取地图数据的 3D 笛卡尔坐标。可以使用 echarts.add3DLayer 函数为 geoJSON 数据添加高程信息。

例如,使用以下代码获取中国地图的高程数据:

$.get('data/asset/data/geo3d-china.json', function (geo3D) {
  echarts.add3DLayer('china-high', geo3D, {
    // 其他配置项
  });
}, 'json');


其中,geo3d-china.json 文件是包含中国地图高程数据的 json 文件。echarts.add3DLayer 函数用于添加 3D 图层,第一个参数为图层名称,第二个参数是高程数据,第三个参数是配置项。


通过添加高程数据,地图的图层信息就变成了 3D 笛卡尔坐标系的空间信息。


2.定义材质样式

使用 echarts.registerMap3d 函数进行地图的 3D 效果的渲染,可以通过在地图的 textures 属性中配置材质路径和样式信息实现地图材质功能。

例如,定义一个地图 材质

echarts.registerMap3d('mapName', {
    //材质路径
    texture: 'path/to/texture.png',
    // 材质样式
    color: 'red',
    // 光照强度,控制阴影的强度
    specularIntensity: 1,
    // 高光贴图强度
    glossIntensity: 1,
    // 其他配置项
});


其中,texture 为材质路径,可以是图片路径或调色板配色方式;color 为材质颜色;另外还可以通过 specularIntensityglossIntensity 属性来控制阴影、镜面和高光的效果。

  1. 为地图元素应用材质


将定义的材质样式应用到地图元素上,可以在地图的 visualMap 中配置对应的材质信息。例如:

var option = {
    // 其他配置项
    visualMap: {
        type: 'continuous',
        dimension: 'value',
        calculable: true,
        min: 0,
        max: 1000,
        top: 'bottom',
        left: 'right',
        inRange: {
            color: ['#50a3ba', '#eac736', '#d94e5d']
        },
        // 定义材质
        textures: [
          {id: 'mapName', type: 'repeat', src: 'path/to/texture.png'}
        ],
        inRange: {
            // 应用材质
            texture: 'mapName',
            color: '#fff'
        },
        // 其他配置项
        seriesIndex: [0]
    },
    // 其他配置项
}


在上述代码中,通过 textures 属性引入定义的材质,再通过 inRange 属性在视觉映射中应用材质,以实现地图的材质效果。


需要注意的是,不同的视觉映射类型(continuous,piecewise,category)会影响材质显示的效果。在设置材质时,需要视图形数据类型选择合适的映射方式,并根据实际需求进行适当调整才能达到最佳效果。


@漏刻有时

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
128 0
别让你的数据“裸奔”!大数据时代的数据隐私保护实战指南
别让你的数据“裸奔”!大数据时代的数据隐私保护实战指南
146 19
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
Axure设计的“广东省网络信息化大数据平台”数据可视化大屏
本文介绍由Axure设计的“广东省网络信息化大数据平台”数据可视化大屏。大屏分为左中右三区域,共九个模块,涵盖设备占比、数据异常、地市排名、关键指标、地图分布、订单信息等。通过环形图、柱状图、饼图等多种图表形式,将复杂数据直观呈现,助力决策者全面掌握数据动态,推动广东省网络信息化建设发展。
183 9
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
本文深入介绍 Hive 与大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
567 2
ClickHouse与大数据生态集成:Spark & Flink 实战
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
1062 1
基于阿里云大数据平台的实时数据湖构建与数据分析实战
在大数据时代,数据湖作为集中存储和处理海量数据的架构,成为企业数据管理的核心。阿里云提供包括MaxCompute、DataWorks、E-MapReduce等在内的完整大数据平台,支持从数据采集、存储、处理到分析的全流程。本文通过电商平台案例,展示如何基于阿里云构建实时数据湖,实现数据价值挖掘。平台优势包括全托管服务、高扩展性、丰富的生态集成和强大的数据分析工具。

热门文章

最新文章