參加數學建模比賽時,很多題目——諸如統計類、數據挖掘類、環保類、建議類的題目總會涉及到地理相關的情景,往往要求我們制作與地圖相關的可視化內容。如下圖,這是21年亞太賽的那道塞罕壩的題目,期間涉及到溫度、降水和森林覆蓋率等問題:
實際上,有很多方法可以完成論文寫作中對可視化圖片的需求,如Python、MATLAB、Arcgis、echarts、一些BI平臺、Excel甚至PPT。本帖介紹幾種博主在本科期間參賽用到的方法~
一.pyecharts包繪制地圖
首先我們需要安裝一個pyecharts包:
pip install pyecharts
如下,可以簡單地繪制一張中國地圖的可視化效果:
from pyecharts.charts import Map
map=Map() #創建地圖對象
data=[("北京省",11),("山西省",14),("黑龍江省",23),("浙江省",33),("湖南省",43)
] #數據格式:列表中以元組構成map.add("原始形態",data,"china")#實際上默認值就是china
map.render()
生成的文件默認叫render.html,就在原路徑:
?
一個小注意點是:現在必須寫成“山西省”的格式,寫成山西是不顯示數據的!換句話說,key值必須和地圖中的名字對應~?
設置全局選項后可以展示顏色:
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()
一方面不太好看,另一方面熱力條可能會有問題,需要手動調整一下:
map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=Trueis_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"}])
)
除了全國的大地圖,還可以繪制省級、市級的地圖:
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
map=Map() #創建地圖對象
data=[("太原市",100),("大同市",100)
] #數據格式:列表中以元組構成map.add("原始形態",data,"山西")
map.render()
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則更多用來展示某種地理元素的分布情況,比如某條路徑~
geoplot(10,112)
兩個參數分別是緯度和經度,然后會生成以該數值為中心的地圖:
出于美觀考慮可以添加底圖:
geobasemap streets
其實還有很多別的參數,但是其他的需要聯網(也就是必須用正版的)~?
?這里我們可以繪制一下從太原去北京再去上海、蘇州的路線(經緯度可以自行查閱~)
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個城市的常住人口數,只需要再添加額外的權重參數也即人數即可:
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
如上就是本文全部內容,各位可以根據所選題目的實際情況靈活調整戰術~?