当前位置: 首页 > news >正文

地图上的标签为图片_三种方式制作数据地图

数据地图,因为地理信息的加持,信息丰富,直观明显,广泛地应用于多个行业,数据分析必备利器。

方式一:通过Excel制作数据地图

本文大篇幅在介绍这种方式的具体操作方法,共分为四个步骤。概括来说其主要通过自定义矢量地图和VBA编程来为矢量地图填充颜色及设置透明度的方式实现。话不多说,还是先上效果图:

a1c8e07de991f9161b05354dcf031160.gif

首先是全国省份色温图,点击单选按钮可切换不同指标。另有下拉列表可选择单击各省份时,是显示该省份标签,还是下钻到该省份的各城市色温图;下钻到各城市后,依然可以通过点击单选按钮切换该省份各城市的不同指标色温图。我们可以利用其查看各省市的经济、人口、销量、份额等多个指标色温图,并可按需求及特定格式设置标签。也可增加逆序条形图辅助查看数据。单选按钮切换指标,尽显数据灵动之美。

01

准备全国各省市矢量图

色温图素材的准备分为三部分:

  1. 准备全国各省及分省各城市矢量地图

    4e3c93c1fee2f2221c7eec3411f88bb4.png

ea96a93ab4309c2220ffba95d7f8f98c.png

B.为各省份及各城市的矢量图形添加有意义的名字。这里以新疆为例,点击新疆矢量图,在左上角名称输入框内键入"新疆",目的是方便VBA代码后期通过省份名称进行调用。

987c3576f089e1bb4c269ff1a14c3501.gif

注:前人栽树,后人乘凉,更多精彩内容详见刘万祥老师的《用地图说话》图书及范例。

C.将命好名字的各省地图单独放置到一张工作表中;将已经命好名字的各省市矢量图,按照省份顺序排成一行,放在"各省矢量图"工作表中。

e4f2f55347e83964d5165620e7df41e4.png

以便于后期通过定义名称动态查询引用图片。如果对该方法尚不清楚,请参考之前的文章Excel VS Tableau省市交叉销售地图。

02

制作全国各省份色温图

2.1准备全国各省份数据

将其放置在"data"工作表中。通过B:D列,查询引用当前指标对应数据(C列),并计算色温图透明度(D列)。

5e170eccf17315efd3cf2c14e6c146f2.gif

2.2在全国地图中,插入六个单选按钮

单击右键"编辑文字",分别为各单选按钮命名。接下来,设置控件格式,将单元格链接设置为"全国map"工作表B4单元格。B4单元格的值,后期将作为参数传递,以判断当前所选指标。

ee0d3d3a752b19aaa070a87fec9787a3.gif

2.3为六个单选按钮赋宏

按下ALT+F11键,插入如下代码,其可实现勾选单选按钮时,会根据单选按钮对应的指标,为各省份矢量图填色和设置透明度。

976f0bd3231414a36284afab5f24693c.png

右键点击单选按钮,指定宏。找到以上代码的名称,即“fill_color”程序,选择确定即可。

438b8ae92329b30a4e92553c5a148c57.gif

2.4添加组合框控件

控制单击省份图形时的效果,是显示该省份标签还是向下钻取到该省份各城市。链接单元格设置为全国map工作表AO4单元格。

f2923ab80c2b6807a5dcbef3ca45c92f.gif

2.5为各省份图形添加单击突显效果。

这里分两个步骤:

Step1:编写单击突显子程序:单击任一省份时,该省份矢量图边界变成红色线条,同时之前选中的省份矢量图边界的红色线条消失。

8f3a0a5f760307a8a3d2ad28f1078453.png

单击突显所选省份效果如下:

29107c7addd817264c7e794be0aa956a.gif

单击省份向下钻取效果如下:

f1b504f372b136a0a8b7049ee0aa953c.gif

注意:这里面用到了前面提及的定义名称动态引用图表。这个方法与之前的文章Excel VS Tableau省市交叉销售地图用到的方法基本一致,只是在细节处理上略有不同:本例中是将图形排成一行,而不是一列。定义名称省份色温图=INDEX(各省矢量图!$2:$2,MATCH(Province_map!$C$4,各省矢量图!$1:$1,0)),然后插入任一图片,将该图片设置为“=省份色温图”,即完成了对各省份色温图的动态调用。

Step2:编写批量指定宏程序。一次性为所有省份添加改宏,避免逐个省份添加。运行如下宏代码,则可以为全国各省份均添加单击突显省份效果。下图中:

0708663e76f4d1af00f676a8de8a8922.png

ActiveSheet.Shapes(I).OnAction= "'thisworkbook.user_click_Nation'"语句,为各省份地图板块均赋予了前面定义过的宏user_click_Nation。

2.6为矢量地图设置标签,分为两个步骤:

Step1:编写批量添加标签程序,以下代码用于为各省份添加标签。

f8d50a88198e7f02992aedfa082e6ee8.png

标签值设置方法:以上代码通过for循环,分别为各省份对应的地图板块设置标签值公式,将标签值设置为E列。当前省外之外,标签值显示为空。

20ce6877f3f6de48ddc02532497542e7.gif

Step2:通过提前定义好标签格式,并在准备标签数据时引入Text函数,可保证在数据地图上的标签按照所需格式显示。

7ce8c5e4a986011f57fc4509d75ba5e2.gif

03

制作分省份倒序条形图

这一部分为色温地图的补充内容,倒序条形图可以直观地辅助分析。制作逆序条形图,需准备如下数据源,通过加微量的方法,确保排序时不会出现相同值导致错误。继而通过查询函数,生成AE:AG列数据用于制作条形图。

7618dc63954dbb17838c0cb1ba6fffc9.gif

AL列数据用于另外生成一张条形图,可以用来突显当前选中省份。也即下图为两个条形图拼合而成,在拼合过程中设置了背景为透明。

注:这里没有采用添加序列的方式,主要考虑到,如果不是条形图而是堆积条形图,则添加序列的方式将不再适用。

944bdacb6b0f373ed818af2bfd4c4e82.gif

04

制作分省份各城市色温图

分省份各城市的制作方法与以上全国省份色温图的做法基本相同。

不同之处在于:

A.提取各省份数据时,用到了之前Excel连接SQL Server数据库一文中的数据库连接模块。并通过以下代码,将选中省份数据从数据库汇总筛选出来,粘贴到province_data工作表中J:N列相应位置,用于生成省市色温图和条形图。

33ba259f09fb7af61ae7b7bd6b608c21.png

B.通过以下代码,生成省市色温图。这里相当于通过for循环,通过判断当前选中的省份内城市名称(J5:J44单元格),为其设置对应的色温图。

17a59ad28bcfa3fa1b5e14beb42e20df.png

C.这里会通过动态引用图片的方式,从以下后台数据表中动态引用图片, 将当前选中省份的色温图通过定义好的名称"省份矢量图"呈现在Province_map工作表中的指定区域。

050db0b4631c43988aa0ec3ad992ec35.png

方式二:通过BI软件Tableau或PowerBI制作数据地图

刚刚讲到这种Excel从省份下钻到城市的数据地图,肯定已经会有小伙伴说,这个用BI实现起来更容易,BI已然成为了房间里的大象,视而不见是自欺欺人。

Tableau当中,我们可以将省市设置好地理角色,将其设置为填充地图。

989219ca7c469b901498d3e23b107e50.gif

上图为用Tableau实现数据地图效果,后续会在本微信公号中分享Tableau的版本。

不过不要忘了,用Excel实现至少有两大好处:

第一,价格便宜,应用广泛。BI软件价格不菲,以Tableau为例,每年费用高达2000多美元,让人望而却步;PowerBI目前是免费的,但其如何实现及效果如何,笔者未曾尝试过,不便过多评论,大家有兴趣可以探讨。

第二,Excel制作此图,一劳永逸,后续只需修改数据,直接使用即可。

方式三:通过Excel插件Datamap制作数据地图

如果说小伙伴们觉得前述这种Excel制作数据地图的方法还是过于复杂,也不愿使用BI软件来做数据分析和可视化,这里也为大家提供第三种解决方案,那就是为你的Excel安装Datamap插件。曾经有名为flash418的Excel大神在Excelhome上发表过巅峰之作,让我印象深刻,叹为观止。

相关文章:

  • arcengine 将一个shp的数据读取到另一个shp_从零开始,构建电子地图网站:0_3_数据处理python(1)...
  • python极简主义_极简主义的践行者:一行python有哪些玩法?
  • idea中maven找不到本地仓库jar包_Mac Intellij Maven使用本地仓库的jar包
  • mysql默认安装目录 linux_关于Linux安装mysql默认配置文件位置详解
  • jquery mysql实现加入购物车_jquery-实现加入购物车效果
  • mysql 查询最近7天 时间戳数据_mysql查询今天、昨天、7天、近30天、本月数据
  • 景安mysql主机_景安国内虚拟主机空间如何创建数据库
  • mysql新手问题大全_初学者必读:MySQL数据库常见问题汇总
  • qopenglwidget 拖动窗口时图形消失_CAD画图时鼠标原来是这么用的!
  • mysql root 赋权_mysql 里对root及普通用户赋权及更改密码的一些命令
  • freebsd linux mysql_怎样在linux或unix服务器上安装、使用MySQL
  • mysql eav_检索MySQL EAV结果作为关系表的最佳性能是什么
  • mysql与后台乱码问题_MySQL+PHP[utf-8]乱码原因与解决方法
  • MySQL集函数随机数_MySQL的随机数函数rand()的使用技巧
  • jmx编程监控mysql_JMX-JAVA进程监控利器
  • 0基础学习移动端适配
  • Bytom交易说明(账户管理模式)
  • ES6 学习笔记(一)let,const和解构赋值
  • Java IO学习笔记一
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java方法详解
  • Linux快速复制或删除大量小文件
  • PHP那些事儿
  • 从零开始学习部署
  • 大整数乘法-表格法
  • 分享几个不错的工具
  • 聊一聊前端的监控
  • 前端临床手札——文件上传
  • 正则与JS中的正则
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 带你开发类似Pokemon Go的AR游戏
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​iOS实时查看App运行日志
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #162 (Div. 2)
  • #FPGA(基础知识)
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (0)Nginx 功能特性
  • (1)STL算法之遍历容器
  • (C语言)二分查找 超详细
  • (二)windows配置JDK环境
  • (三)模仿学习-Action数据的模仿
  • (四)库存超卖案例实战——优化redis分布式锁
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)socket Aio demo
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)利用webkit抓取动态网页和链接
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • **PHP分步表单提交思路(分页表单提交)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。