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

news2024/9/20 16:41:55

引言

数据可视化是数据分析中的重要环节,它可以帮助我们直观地理解数据。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 提供了更多高级功能和定制选项,可以满足你对数据可视化的各种需求。希望本文能够帮助你入门数据可视化,并激发你探索更多可能性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python爬虫教程】第7篇-requests模块的cookies保存和使用

文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies 保存cookies是避免每次都登录获取权限&#xff0c;一遍权限是有过期时间的&#xff0c;不需要每次重复登录&#xff0c;可以将cookies保存起来…

vue数据缓存

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

苹果手机相册怎么全部删除照片?这样做快人一步

使用苹果手机越久&#xff0c;大家手机里存储的照片也日益增多&#xff0c;内存逐渐变得紧张。不少用户在换上新手机后&#xff0c;将旧的苹果手机当作备用机。在为新手机腾出空间时&#xff0c;大家清理了大量不用的文件和内存&#xff0c;然而&#xff0c;清理手机相册却成了…

【找不到视图问题解决】@RestController 与 @Controller注解的使用区别

一、问题描述 苍穹外卖在菜品分页查询功能实现的过程中&#xff0c;出现了找不到视图的情况 2024-07-12 21:54:20.860 ERROR 22488 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with p…

剖析 AI 对音乐的影响:创造还是毁灭之路

文章目录 &#x1f4d2;一、引言 &#x1f4d2;二、AI 降低音乐创作门槛 &#x1f680;&#xff08;一&#xff09;技术进步带来的便捷 &#x1f680;&#xff08;二&#xff09;对音乐普及的推动作用 &#x1f4d2;三、AI 重塑音乐创作流程 &#x1f680;&#xff08;一…

【多个Python版本存在,使用pip+不同版本安装库时,windows弹出打开方式窗口的解决方法】

问题描述 电脑上存在python3.9&#xff0c;3.10&#xff0c;3.11&#xff0c;安装顺序也是先安装3.9&#xff0c;然后3.10&#xff0c;最后3.11&#xff0c;那么直接使用pip安装&#xff0c;会装在3.11的位置&#xff0c;经过搜索可以通过pip版本&#xff0c;比如pip3.9 insta…

Java程序员转行大模型的机遇与挑战

随着人工智能技术的迅猛发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;正逐渐成为IT行业的热点。对于Java程序员来说&#xff0c;转行大模型领域不仅意味着新的机遇&#xff0c;也面临着诸多挑战。本文将探讨Java程序员转行大模型的机遇与挑战&am…

【系统架构设计师】十一、系统架构设计(层次架构风格|MVC|面向服务的架构风格|ESB)

目录 五、层次架构风格 5.1 两层C/S架构 5.2 三层C/S架构 5.3 三层B/S架构 5.4 MVC架构 5.5 MVP架构 5.6 MVVM架构 六、面向服务的架构风格 6.1 SOA特征 6.2 Web Service 6.2.1 关键技术 6.2.2 WEB Service 6.3 企业服务总线ESB 相关推荐 历年真题练习 五、层次…

PostgreSQL安装/卸载(CentOS、Windows)

说明&#xff1a;PostgreSQL与MySQL一样&#xff0c;是一款开源免费的数据库技术&#xff0c;官方口号&#xff1a;The World’s Most Advanced Open Source Relational Database.&#xff08;世界上最先进的开源关系数据库&#xff09;&#xff0c;本文介绍如何在Windows、Cen…

【c++11】什么情况下需要封装set/get

文章目录 一、平凡类型与非平凡类型什么时候使用set/get1.平凡类型2.非平凡类型 二、构造函数参数较多解决办法1.把所有参数放到一个结构体里面2.使用build设计模式 三、如果构造函数众多&#xff08;参数很多&#xff09;1.模仿make_unique&#xff0c;就地构造2.基于build设计…

【Typescript】Interface和type的区别;探讨为什么interface赋值给Record需要索引签名

一、Interface与type的区别 1、Interface可以声明合并&#xff0c;type不行 声明同名的类型&#xff0c;Interface同名会合并&#xff0c;而type重名会报错 2、类型扩展的方式不同 Interface基于extends继承扩展基类类型&#xff0c;而type利用 & 扩展 3、type可以被基础…

使用geoipupdate自动更新GeoIP数据库

一、 什么是 GeoIP&#xff1f; 通过在数据库中将地理位置和 IP 地址相互映射&#xff0c;软件程序便可以使用 IP 地址来确定其对应的地理位置&#xff0c;其中包括国家/地区、州/省、城市、邮政编码、纬度/经度、ISP、区号和其他信息。 很多软件都使用 MaxMind 的数据库对 IP…

Hive的基本操作(查询)

1、基础查询 基本语法 select 字段列表|表达式|子查询 from 表(子查询|视图|临时表|普通表) where [not] 条件A and|or 条件B --先&#xff1a;面向原始行进行筛选 group by 字段A[,字段B,...] > 分组【去重处理】 having 聚合条件(非原始字段条件) --再&#x…

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

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

Catena-x标准解读:CX-0005 Item Relationship Service API 2.1.1 项目关系服务

1 介绍 如今&#xff0c;大量数据存储在一个行业供应链的不同参与者之间。通过将数据与其相关上下文连接起来&#xff0c;可以极大地提高数据的价值。 为了实现跨企业链接数据&#xff0c;应用了方面模型、标准化协议和连接数据的标准化方法等标准。Catena-X为访问跨企业链接…

Python学习:实现Python项目并学习如何进行(附70个项目源码)

实现Python项目并学习如何进行&#xff0c;是一个循序渐进的过程&#xff0c;涵盖了多个方面&#xff0c;包括基础知识的学习、技能的提升、项目的规划和实施等。以下是一个基本的指南&#xff0c;帮助你开始学习并实现Python项目&#xff1a; 1. 学习Python基础知识 语法与基…

Linux介绍以及常用命令

目录 1. 什么是Linux 2. Linux的种类 3. CentOS7 超详细的CentOS7.4下载与图文安装 4. 常用的网络适配器种类 5. 安装ssh客户端软件 6. CentOS7的目录结构 7. Linux常用命令详解 1.目录切换命令 -- cd 2. 查看目录下的内容 -- ls 3. 查看当前所在的目录 -- pwd 4. 创…

如何在gitee上创建远程仓库?

登录gitee网站后 填写自己的仓库信息后点击创建 然后来到一个新的界面可以看到自己的仓库地址 这样一个空白的仓库就建立好了 也可以按需选择初始化仓库

结合类型信息(1)——特征丰富的知识库补全网络

1 引言 1.1 问题 首先&#xff0c;隐式对应关系的问题。在联合嵌入模型中&#xff0c;知识库和文本数据之间的关系并不是直接给出的&#xff0c;而是需要通过实体在文本中的共现来推断。这意味着模型必须从上下文中学习实体之间的潜在关联&#xff0c;而不是基于显式的标签或…

利用css设计一套漩涡式网格(grid)布局

在Web开发中,CSS Grid布局系统为我们提供了前所未有的灵活性和控制力,使得创建复杂的二维布局变得轻而易举。今天,我们将探讨一种特殊的Grid布局——漩涡式布局,并通过一个具体的HTML和CSS示例来深入了解其实现方式。 漩涡式Grid布局概述 漩涡式Grid布局是一种视觉上呈现出…