如何使用ECharts和DataV.GeoAtlas创建广东省人口分布图

引言

数据可视化是数据分析中的重要环节,它可以帮助我们直观地理解数据。ECharts 是一个由百度团队开发的开源数据可视化库,它提供了丰富的图表类型和灵活的配置选项。DataV.GeoAtlas 是阿里云提供的一个地理数据可视化平台,它可以帮助我们获取地理数据并生成地图。本文将介绍如何结合 ECharts 和 DataV.GeoAtlas 创建一个展示广东省2023年常住人口分布的地图。

准备工作

在开始之前,我们需要准备以下资源:

  1. ECharts 库:用于数据可视化。
  2. DataV.GeoAtlas:用于获取地理数据。
  3. Vue.js:用于构建前端界面(本示例中使用)。

获取地理数据

首先,我们需要从 DataV.GeoAtlas 获取广东省的 GeoJSON 数据。可以通过以下两种方式进行:

方法一:访问DataV.GeoAtlas 地理小工具系列,获取json格式文件到项目中直接引用。

方法二: 访问DataV.GeoAtlas 地理小工具系列,使用在线 API 地址封装成接口到项目中调用。

集成 ECharts 和 GeoJSON 数据

接下来,我们将在 Vue.js 项目中集成 ECharts 和 GeoJSON 数据。以下是主要步骤:

1. 安装 ECharts

使用 npm 或 yarn 安装 ECharts:

npm install echarts --save

或者

yarn add echarts

2. 引入 ECharts 和 GeoJSON

在 Vue 组件中引入 ECharts 和 GeoJSON 数据:

import * as echarts from 'echarts';
import geoJson from "../../util/geoJson.json"; //这里使用的方法一
echarts.registerMap("GD", geoJson);

3. 创建Vue组件

在你的 Vue 组件中,你需要有一个 HTML 容器元素,比如 <div>,它将作为 ECharts 图表的挂载点。给这个容器设置一个 id 属性,这样你就可以通过 JavaScript 访问并初始化 ECharts 实例。

<template>
  <div class="home">
    <div ref="echartContainer" style="width: 650px; height: 500px">
      <div id="myEchart" style="width: 100%; height: 100%"></div>
    </div>
  </div>
</template>

4. 配置 ECharts 选项

在 Vue 组件的 data 函数中定义图表的数据和配置:

data() {
    return {
      echartsData: [
        { name: '广州市', value: 1882.7 },
        { name: '深圳市', value: 1779.01 },
        { name: '东莞市', value: 1048.53 },
        { name: '佛山市', value: 961.54 },
        { name: '湛江市', value: 707.84 },
        // ...其他城市数据
      ],
    };
  },

注意事项:确保 echartsData 中的 name 属性与 geoJson 文件中的区域名称完全一致。任何不匹配都会导致 ECharts 无法找到相应的区域,从而无法显示数据(如下图所示)。

5. 初始化 ECharts 图表

在 Vue 组件的 mounted 钩子中初始化 ECharts 图表:

mounted() {
  this.$nextTick(() => {
    this.initEcharts();
  });
},
methods: {
  initEcharts() {
    // 初始化图表的代码
  },
}

6. 样式调整

使用 CSS 对图表进行样式调整,确保图表在页面中正确显示。

<style lang="scss" scoped>
.home {
  width: 100%;
  max-width: 1920px; /* 可以根据实际需求调整 */
  height: 500px;
  margin: 0 auto; /* 居中显示 */
}
</style>

7.完整示例代码

以下是完整的 Vue 组件示例代码,展示了如何创建广东省2023年常住人口分布图。

<template>
  <div class="home">
    <div ref="echartContainer" style="width: 650px; height: 500px">
      <div id="myEchart" style="width: 100%; height: 100%"></div>
    </div>
  </div>
</template>

<script>
import * as echarts from 'echarts';
import geoJson from "../../util/geoJson.json";
echarts.registerMap("GD", geoJson);

export default {
  data() {
    return {
      echartsData: [
        { name: '广州市', value: 1882.7 },
        { name: '深圳市', value: 1779.01 },
        { name: '东莞市', value: 1048.53 },
        { name: '佛山市', value: 961.54 },
        { name: '湛江市', value: 707.84 },
        { name: '茂名市', value: 625.23 },
        { name: '惠州市', value: 607.34 },
        { name: '揭阳市', value: 565.36 },
        { name: '汕头市', value: 555.75 },
        { name: '江门市', value: 482.24 },
        { name: '中山市', value: 445.82 },
        { name: '肇庆市', value: 413.17 },
        { name: '清远市', value: 398.67 },
        { name: '梅州市', value: 384.91 },
        { name: '韶关市', value: 285.77 },
        { name: '河源市', value: 283.83 },
        { name: '汕尾市', value: 269.13 },
        { name: '阳江市', value: 262.47 },
        { name: '潮州市', value: 257.62 },
        { name: '珠海市', value: 249.41 },
        { name: '云浮市', value: 239.66 }
      ],
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.initEcharts();
    });
  },
  methods: {
    initEcharts() {
      const myChart = echarts.init(document.getElementById('myEchart'));
      const option = {
        title: {
          text: '广东2023年常住人口 (2023)',
        },
        tooltip: {
          trigger: 'item',
          formatter: function (params) {
            return params.seriesName + '<br/>' + params.name + ': ' + params.value + '(万人)';
          }
        },
        // 工具栏
        toolbox: {
          show: false,
          orient: 'vertical',
          left: 'right',
          top: 'center',
          feature: {
            dataView: { readOnly: false },
            restore: {},
            saveAsImage: {}
          }
        },
        // 视觉映射组件
        visualMap: {
          min: 100,     // 组件的允许的最小值
          max: 2000,    // 组件的允许的最小值
          text: ['高', '低'],
          realtime: true,  // 拖拽时,是否实时更新
          calculable: true, // 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)
          inRange: {
            //定义 在选中范围中 的视觉元素
            color: ['lightskyblue', 'yellow', 'orangered']
          }
        },
        series: [
          {
            name: '广东2023年常住人口',
            type: 'map',
            map: 'GD',
            label: {
              show: true
            },
            emphasis: {
              itemStyle: {
                // 鼠标悬浮时的样式
                areaColor: '#f74342',  // 设置高亮时的填充颜色
              }
            },
            data: this.echartsData,
            click: function (params) {
              // params 是事件参数,包含了被点击区域的信息
              console.log('点击了某地级市:', params);
            },
          },
        ],
      };
      myChart.setOption(option);
      myChart.on("click", function (params) { // 监听地图点击事件
        console.log('某地级市被点击了',params)
      });
      myChart.on("mouseover", function (params) { // 监听鼠标移动事件
        console.log('鼠标移入某地级市',params)
      });
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  width: 100%;
  max-width: 1920px; /* 可以根据实际需求调整 */
  height: 500px;
  margin: 0 auto; /* 居中显示 */
}
</style>

结语

通过本文的介绍,你应该已经了解了如何使用 ECharts 和 DataV.GeoAtlas 创建一个展示广东省人口分布的地图。这只是一个开始,ECharts 提供了更多高级功能和定制选项,可以满足你对数据可视化的各种需求。希望本文能够帮助你入门数据可视化,并激发你探索更多可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800743.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录|.NET上位机开发和PLC通信的实现

本文记录源自&#xff1a;B站视频 实验结果&#xff1a;跟视频做下来是没有问题的。能运行。 自己补充做了视频中未实现的读取和写入数据部分【欢迎小伙伴指正不对的地方】 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Ste…

vue3表格使用拖拽排序

拖拽排序 实现效果实现步骤拖拽排序功能的完整代码 实现效果 实现步骤 先安装sortable.js库使用的vue文件中引入 import Sortablejs from ‘sortablejs’在进入页面后创建sortable实例在提交后端时可获取到排序后的最新table列表数据 sortable.js文档 拖拽排序功能的完整代码 …

SpringBoot中常用的注解及其用法

1. 常用类注解 RestController和Controller是Spring中用于定义控制器的两个类注解. 1.1 RestController RestController是一个组合类注解,是Controller和ResponseBody两个注解的组合,在使 用 RestController 注解标记的类中&#xff0c;每个方法的返回值都会以 JSON 或 XML…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…

语音识别概述

语音识别概述 一.什么是语音&#xff1f; 语音是语言的声学表现形式&#xff0c;是人类自然的交流工具。 图片来源&#xff1a;https://www.shenlanxueyuan.com/course/381 二.语音识别的定义 语音识别&#xff08;Automatic Speech Recognition, ASR 或 Speech to Text, ST…

智能厕所系统让厕位状态清晰可见

在当今科技飞速发展的时代&#xff0c;智能化的应用已经渗透到我们生活的方方面面&#xff0c;智能厕所系统就是其中一个令人瞩目的创新。其中&#xff0c;厕位有人无人实时显示这一功能&#xff0c;为人们带来了极大的便利和舒适。 当身处一个繁忙的公共场所&#xff0c;如商场…

嵌入式全栈设计思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法构建高效智能电源管理系统(附代码示例)

智能电源管理系统是一个基于STM32G4微控制器的高性能数字电源控制解决方案。本项目旨在设计一个功能全面、高效稳定的电源管理系统,可广泛应用于工业控制、新能源、通信设备等领域。 1.1 系统主要特点 高精度数字电源控制&#xff1a;利用STM32G4的高性能ADC和定时器,实现精确…

【NLP实战】基于TextCNN的新闻文本分类

TextCNN文本分类在pytorch中的实现 基于TextCNN和transformers.BertTokenizer的新闻文本分类实现&#xff0c;包括训练、预测、数据加载和准确率评估。 目录 项目代码TextCNN网络结构相关模型仓库准备工作项目调参预测与评估 1.项目代码 https://github.com/NeoTse0622/Te…

C++相关概念和易错语法(22)(final、纯虚函数、继承多态难点)

1.final final在继承和多态中都可以使用&#xff0c;在继承中是指不想将自己被继承&#xff0c;在多态中是指不想该函数被重写&#xff0c;比较简单&#xff0c;下面是一些使用例子。 2.纯虚函数 当我们需要抽象一个类的时候&#xff0c;我们就需要用到纯虚函数。所谓抽象的类…

【微服务】Spring Cloud Config解决的问题和案例

文章目录 强烈推荐引言解决问题1. 配置管理的集中化2. 配置的版本控制3. 环境特定配置4. 配置的动态刷新5. 安全管理敏感数据6. 配置的一致性 组件1. **配置服务器&#xff08;Config Server&#xff09;**2. **配置客户端&#xff08;Config Client&#xff09;** 配置示例配置…

电脑数据恢复软件哪个好?这六款软件轻松恢复数据

随着电脑使用的日益频繁&#xff0c;数据的丢失也成为了一个不可避免的问题。在生活中&#xff0c;我们常因误删除、误格式化、分区失败、中病毒等而丢失数据。在这种情况下&#xff0c;一个好的数据恢复软件就显得尤为重要。 电脑数据恢复软件哪个好&#xff1f;本文将为大家…

Midjourney 商业实战案例(附AI学习工具教程资料)

前言 Midjourney 商业实战案例 &#xff08;附AI学习工具教程资料&#xff09; 如何把 AI 绘画应用到设计工作中&#xff1f; AI 绘画技术可以应用于设计工作中&#xff0c;帮助设计师更快速、更高效地完成设计工作&#xff0c;以下是一些常见的应用&#xff1a; **1. 快速…

对接企业微信API自建应用配置企业可信IP

前言 为了实现系统调用团队会议功能&#xff0c;组织发起企业微信会议&#xff0c;于是需要和企业微信做API对接。对接过程很难受&#xff0c;文档不清晰、没有SDK、没有技术支持甚至文档报文和实际接口报文都不匹配&#xff0c;只能说企业微信的API是从业以来见过的最难用的AP…

【数据结构与算法 经典例题】判断二叉树是否对称

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 三、C语言实现代码 一、问题描述 给你一个二…

ENSP中NAT的相关实验(两个私网,一个公网)

题目 实验需求 1.按照图示配置IP地址&#xff0c;公网地址100.1.1.1/24 2.私网A通过NAPT&#xff0c;使R1接入到互联网&#xff0c;私网B通过EASY IP&#xff0c;使R3接入到互联网 3.私网A配置NAT SERVER把Telnet的Telnet服务发布到公网&#xff0c;使PC2可以访问 三、实验…

Vue中使用mind-map实现在线思维导图

概述 在前面的文章Vue中实现在线画流程图实现中介绍了流程图的在线绘制&#xff0c;在本文&#xff0c;给大家分享一下基于mind-map实现在线的思维导图&#xff0c;并实现&#xff1a;1. 导图导出为图片&#xff1b;2. 打开xmind文件。 实现效果 实现 1. mind-map简介 simp…

随笔(三):CSS

一、CSS .&#xff08;类选择器&#xff09;和 #&#xff08;ID选择器&#xff09;在CSS中的主要区别在于它们的选择范围和用途&#xff1a; 1. 选择范围 类选择器&#xff08;. 开头&#xff09;&#xff1a; 类选择器用于选择具有指定类名的所有HTML元素。由于一个HTML元素…

spring boot基础知识

spring boot是整合spring 一系列的包的坐标集合 对依赖进行整合 总体介绍 spring boot是用来方便构建项目的工具 spring cloud是用来方便spring boot项目之间进行数据交互通讯和配置的 spring cloud data Flow 是用来进行数据的连接的 Spring 缺点 配置繁琐 虽然Spring的组件代…

超市管理系统 需求分析与设计 UML 方向

一、项目介绍 1.1项目背景 随着经济一体化和电子商务的迅速发展&#xff0c;网络传播信息的速度打破了传统信息传递的模式&#xff0c;互联网的高速发展和计算机应用在各个高校进展迅速&#xff0c;更多信息化产品的突飞猛进&#xff0c;让现代的管理模式也发生了巨大的变化&…

vue数据缓存

data 对象未定义或未正确传递&#xff1a;确保 data 对象在你调用 onMounted 钩子时已经存在且包含 base.columns 属性。 columns 响应式引用未定义&#xff1a;确保 columns 是一个使用 ref 或 reactive 创建的响应式引用。 异步数据问题&#xff1a;如果 data 是通过异步操…