Python、MATLAB和PPT完成数学建模竞赛中的地图绘制

参加数学建模比赛时,很多题目------诸如统计类、数据挖掘类、环保类、建议类 的题目总会涉及到地理相关的情景,往往要求我们制作与地图相关的可视化内容。如下图,这是21年亚太赛的那道塞罕坝的题目,期间涉及到温度、降水和森林覆盖率等问题:

实际上,有很多方法可以完成论文写作中对可视化图片的需求,如Python、MATLAB、Arcgis、echarts、一些BI平台、Excel甚至PPT。本帖介绍几种博主在本科期间参赛用到的方法~

一.pyecharts包绘制地图

首先我们需要安装一个pyecharts包:

pip install pyecharts

如下,可以简单地绘制一张中国地图的可视化效果:

python 复制代码
from  pyecharts.charts import Map
map=Map()   #创建地图对象
data=[
    ("北京省",11),
    ("山西省",14),
    ("黑龙江省",23),
    ("浙江省",33),
    ("湖南省",43)
]  #数据格式:列表中以元组构成

map.add("原始形态",data,"china")#实际上默认值就是china
map.render()

生成的文件默认叫render.html,就在原路径:

一个小注意点是:现在必须写成"山西省 "的格式,写成山西是不显示数据的!换句话说,key值必须和地图中的名字对应~

设置全局选项后可以展示颜色:

python 复制代码
from  pyecharts.charts import Map
from  pyecharts.options import VisualMapOpts
map=Map()   #创建地图对象
data=[
    ("北京省",11),
    ("山西省",14),
    ("黑龙江省",23),
    ("浙江省",33),
    ("湖南省",43)
]  #数据格式:列表中以元组构成
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True
    )
)
map.add("原始形态",data,"china")#实际上默认值就是china
map.render()

一方面不太好看,另一方面热力条可能会有问题,需要手动调整一下:

python 复制代码
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True
        is_piecewise=True,#允许手动~
        pieces=[
            {"min":11,"max":20,"label":"11-20","color":"#0000ff"},
            {"min":21,"max":30,"label":"11-20","color":"#00ff00"},
            {"min":31,"max":40,"label":"11-20","color":"#ff0000"},
            {"min":41,"max":50,"label":"11-20","color":"#00ccff"}
        ]
    )
)

除了全国的大地图,还可以绘制省级、市级的地图:

python 复制代码
from  pyecharts.charts import Map
from  pyecharts.options import VisualMapOpts
map=Map()   #创建地图对象
data=[
    ("太原市",100),
    ("大同市",100)
]  #数据格式:列表中以元组构成

map.add("原始形态",data,"山西")
map.render()
python 复制代码
from  pyecharts.charts import Map
from  pyecharts.options import VisualMapOpts
map=Map()   #创建地图对象
data=[
    ("迎泽区",100)
]  #数据格式:列表中以元组构成

map.add("原始形态",data,"太原")
map.render()

而针对外国地图,需要下载额外的扩展包,这里就不演示了。此外由于众所周知的原因,说真的网页中的图片绘制的地图在字符的配置上显得不那么美观。因此这种绘图方式仁者见仁智者见智,针对于JSON数据繁多的情况下可以考虑使用~

二.PPT法绘制国内地图

相比之下,博主还是喜欢用"笨办法"来完成地图可视化,毕竟数模比赛的核心并非是可视化技术多么高超,在其他情况一样的情况下------变得好看些才是王道~

访问网站:DataV.GeoAtlas地理小工具系列

进入阿里云地图可视化平台

可以通过手动的方式,亦可以通过右侧的粒度选择器来选中:此处我们选择粒度为市级别的山西省:

当然可以下载JSON格式的数据,然后使用python或者MATLAB等方法------此处博主选择svg格式。SVG 是一种基于 XML(可扩展标记语言)的矢量图形格式。它用于描述二维图形,通过使用 XML 标签和属性来定义图形的形状、颜色、位置、大小等各种属性。与位图不同,矢量图形是由数学公式定义的图形元素组成,所以 SVG 图形在放大或缩小后不会出现失真的情况,能够始终保持清晰的图像质量。下载后,通常情况下是可以通过默认浏览器打开的~

当然了,这玩意可以直接拖入到PPT中:

右键点击取消组合,然后放大:

然后就可以对单独的一块操作啦~

市级单位亦可下载,如下是粒度为区级的太原市------实际上不能再降低了~

这种方式就需要各位手动进行颜色填充了,如果颜色区间相对较少,还是个不错的选择哦~

三.PPT法绘制国外地图

使用国外的地图需要另外一个网站:

Free SVG Maps - amCharts

同样下载后也是svg的格式,同样的方式各位手动填充即可。不过该网站貌似只可以做到省级或者说是州级的单位~

四.Matlab的geoplot和geobubble函数

geoplot,顾名思义------就是绘制一张地理图呗~不过和之前的这几种图不一样:之前几种都是以国家、省份、城市亦或区县级别的单位,来展示某种数值上的差异。而geoplot则更多用来展示某种地理元素的分布情况,比如某条路径~

Matlab 复制代码
geoplot(10,112)

两个参数分别是纬度和经度,然后会生成以该数值为中心的地图:

出于美观考虑可以添加底图

Matlab 复制代码
geobasemap streets

其实还有很多别的参数,但是其他的需要联网(也就是必须用正版的)~

这里我们可以绘制一下从太原去北京再去上海、苏州的路线(经纬度可以自行查阅~)

Matlab 复制代码
lat=[37.87016999999997,39.788078,31.141900000000028,31.29094800000002];
lon=[112.562367,116.32634499999995,121.80916400000001,120.65650900000003];
%分别为4个城市的纬度和经度
 
geoplot(lat,lon,"B-o","LineWidth",2)
geobasemap streets

而geobubble,亦可顾名思义------地理泡泡?实际上就是以地图为底的气泡图。举个例子,我们此时要显示上述4个城市的常住人口数,只需要再添加额外的权重参数也即人数即可:

Matlab 复制代码
lat=[37.87016999999997,39.788078,31.141900000000028,31.29094800000002];
lon=[112.562367,116.32634499999995,121.80916400000001,120.65650900000003];
%分别为4个城市的纬度和经度
weights=[545.44,2185.8,2487.45,1295.8];
lat1=37.8;
lon1=112.56;
value=11000000;
gb=geobubble(lat,lon,weights)
gb.BubbleColorList = summer(1);%选择颜色
geolimits([28 43],[110 125])%限制一下经纬度
geobasemap streets

如上就是本文全部内容,各位可以根据所选题目的实际情况灵活调整战术~

相关推荐
热心网友俣先生3 分钟前
2025年深圳杯D题第一版本matlab代码 论文分享
人工智能·数学建模
HelloZheQ11 分钟前
Go:简洁高效,构建现代应用的利器
开发语言·后端·golang
悟能不能悟11 分钟前
java实现一个操作日志模块功能,怎么设计
java·开发语言
985小水博一枚呀14 分钟前
【EI会议推荐】2025年6月智启未来:通信导航、 机器学习、半导体与AI、数字创新领域国际研讨会总结!
人工智能·python·深度学习·机器学习
Hxyle27 分钟前
c++设计模式
开发语言·c++·设计模式
blammmp1 小时前
算法专题四:前缀和
java·开发语言·算法
www_pp_1 小时前
# 创建一个功能完备的计算器应用:使用PyQt5和Python
开发语言·python·qt
攻城狮7号1 小时前
大模型微调Fine-tuning:从概念到实践的全面解析
人工智能·python·前沿技术·fine-tuning·大模型微调
Aimyon_361 小时前
Java复习笔记-基础
java·开发语言·笔记
XuX031 小时前
MATLAB绘制局部放大图
matlab·贴图