python绘制一份完美的中国地图
本文章小編將帶你學會使用python繪制一份完美的中國地圖~
昨日,突地被一大早的微博熱搜 #自然資源部核查處理問題中國地圖# 刷屏,恍惚中看到了近日在追的《親愛的,熱愛的》。小編還沉浸在酣甜的劇情里,今的又有新熱搜了!!
作為一家資(jia)深(mao)劇粉,帶著欣(ba)喜(gua)的心情瀏覽的熱搜,嗯???好像哪里不對……
第39集中存在的“問題地圖”引發(fā)廣泛關注與討論。
該劇中使用的地圖存在錯誤表示阿克賽欽和我國藏南地區(qū)國界線、我國臺灣和海南島底色與大陸不一致、漏繪我國南海諸島和南海斷續(xù)線、克什米爾地區(qū)不符合國家有關規(guī)定等問題。
不少網(wǎng)友表示,既然是公開播放的劇就該好好審核,制作方與審核方都應該在國家主權(quán)上謹慎且堅持一個完整國家的原則。
絕非小題大做!國家版圖與國歌、國旗一樣,是一個主權(quán)國家的重要標志,體現(xiàn)的事一個國家的完整政治主張,絕不僅是一張圖畫而已。錯誤的國家地圖不僅損害了國家利益,更可怕的是它會向公眾傳播錯誤的知識,并弱化公眾心中國家完整的這一認知。
經(jīng)過一番倒騰,小編決定親手為大家奉上一份使用python繪制的完美的中國地圖。
下面是又一種我國地圖繪制的正確方式!!
進行這個實驗你需要有以下的環(huán)境:
- python 3.6 以上
首先安裝pyecharts, 默認安裝是最新版本的,最新版本的pyecharts需要python3.6以上的版本,在安裝好python并將pip加入到環(huán)境變量之后:
windows系統(tǒng) 打開cmd輸入:
pip install pyecharts
macOS系統(tǒng) 打開terminal輸入:
pip install pyecharts
出現(xiàn) Successfully installed 后就表明 pyecharts 安裝完畢。下面我們將教程分成三個部分:
- 利用pyecharts使用Python畫中國地圖
- 在中國地圖上標記出 《親愛的 熱愛的》 劇中的地圖所缺失的部分
- 將地圖保存成圖片
1. 首先是第一步,我們可以試著使用 pyecharts 來繪制一個簡單的中國地圖:
在任意新建的一個文件夾下(注意路徑不要有中文),創(chuàng)建 map.py 將以下代碼寫入:
from pyecharts.charts import Geo# ->Geo 是函數(shù)注解,表示該函數(shù)返回值為Geo對象 def geo_effectscatter() -> Geo:# 以下為鏈式調(diào)用方法聲明對象c = (Geo()# 添加底部地圖.add_schema(maptype="china"))return c# 生成對象 c = geo_effectscatter()# 渲染地圖 c.render()運行
windows系統(tǒng):打開cmd,cd 進入當前文件夾,輸入下面的指令
python map.pymacOS系統(tǒng):打開terminal,cd進入當前文件夾,輸入上述指令
運行完畢后,你會看見當前目錄下有一個render.html生成,使用瀏覽器打開這個文件便能看見我們的地圖啦,代碼中有幾個值得注意的地方,第一個是:
def geo_effectscatter() -> Geo:與普通的函數(shù)聲明不同,其后面帶了一個函數(shù)注解(->Geo)表明該函數(shù)的返回值是Geo對象。
第二個是:
c = (Geo().add_schema(maptype="china")# 添加底部地圖)這個是Python的鏈式調(diào)用,其效果等同于
c = Geo() c.add_schema(maptype="china")生成的中國地圖如下:
2. 第二步, 在中國地圖上標記出 《親愛的 熱愛的》 劇中的地圖所缺失的部分
在當前目錄下新建文件 map_mark.py
from pyecharts import options as opts from pyecharts.charts import Geo from pyecharts.globals import ChartType def geo_effectscatter() -> Geo:# 初始化地圖參數(shù) page_title: 頁面標題, theme: 畫布主題(主題列表可見Echarts官網(wǎng))InitOpts = opts.InitOpts(page_title="中國地圖", theme="light")c = (# 聲明對象時將初始化參數(shù)Geo(InitOpts)# 添加底部地圖.add_schema(maptype="china")# 增加區(qū)域點(阿克賽欽和藏南地區(qū)).add_coordinate(name='阿克賽欽',longitude=78.928266,latitude=35.115117).add_coordinate(name='藏南地區(qū)',longitude=93.128902,latitude=27.616436)# 將劇中地圖缺少的地方標記出來.add("《親愛的 熱愛的》劇中地圖缺少的部分",[['海南',100], ['臺灣', 100], ['阿克賽欽', 100], ['藏南地區(qū)', 100]],type_=ChartType.EFFECT_SCATTER,)# 顯示出這個點的標簽(formatter={b} 表示顯示地區(qū)名稱,詳細可見:# https://pyecharts.org/#/zh-cn/series_options ).set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter="{b}", font_size=14))# 設置地圖名稱,即左上角.set_global_opts(title_opts=opts.TitleOpts(title="中國地圖")))return c # 生成對象 c = geo_effectscatter()# 渲染地圖 c.render()運行同第一步一樣,改個文件名即可,記得不要在路徑中包含中文。運行完畢后會在當前目錄下生成render.html,使用瀏覽器打開即可看見地圖。
效果如下:
3. 第三步,將地圖保存成圖片
pyecharts 中生成圖片有兩種方法,一種是selenium方法,還有一種是用phantomjs. 本教程推薦使用 phantomjs.
首先,我們需要安裝 snapshot-phantomjs. 同安裝echarts一樣,打開cmd (Windows) 或者terminal (macOS) 輸入以下指令:
pip install snapshot-phantomjs然后,我們需要前往phantomjs官網(wǎng)下載phantomjs:2.1.1版本下載鏈接
phantomjs的安裝在這里以Windows為例進行講解:
解壓下載的壓縮包后,得到phantomjs-2.1.1-windows,里面bin文件夾里的phantomjs.exe就是我們需要的程序,我們需要將其加入到環(huán)境變量中。
windows 10在左下角搜索環(huán)境變量即可。
windows7則需要如下圖所示打開環(huán)境變量(windows10 也可以這樣打開)
向系統(tǒng)變量的path的后面,加入我們 phantomjs.exe 的路徑,比如我的是加入:
C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin
如果你是windows 7系統(tǒng),記得用;與前一條path隔開。
;C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin
接下來就可以生成圖片了,在代碼的首部引入我們剛剛的兩個包
from pyecharts.render import make_snapshot from snapshot_phantomjs import snapshot最后我們調(diào)用生成圖片的函數(shù)即可
# 生成圖片 make_snapshot(snapshot, c.render(), "map.png")完整代碼如下:
from pyecharts.render import make_snapshot from snapshot_phantomjs import snapshotfrom pyecharts import options as opts from pyecharts.charts import Geo from pyecharts.globals import ChartType def geo_effectscatter() -> Geo:# 初始化地圖參數(shù) page_title: 頁面標題, theme: 畫布主題(主題列表可見Echarts官網(wǎng))InitOpts = opts.InitOpts(page_title="中國地圖", theme="light")c = (# 聲明對象時將初始化參數(shù)Geo(InitOpts)# 添加底部地圖.add_schema(maptype="china")# 增加區(qū)域點(阿克賽欽和藏南地區(qū)).add_coordinate(name='阿克賽欽',longitude=78.928266,latitude=35.115117).add_coordinate(name='藏南地區(qū)',longitude=93.128902,latitude=27.616436)# 將劇中地圖缺少的地方標記出來.add("《親愛的 熱愛的》劇中地圖缺少的部分",[['海南',100], ['臺灣', 100], ['阿克賽欽', 100], ['藏南地區(qū)', 100]],type_=ChartType.EFFECT_SCATTER,)# 顯示出這個點的標簽(formatter={b} 表示顯示地區(qū)名稱,詳細可見:# https://pyecharts.org/#/zh-cn/series_options ).set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter="{b}", font_size=14))# 設置地圖名稱,即左上角.set_global_opts(title_opts=opts.TitleOpts(title="中國地圖")))return c # 生成對象 c = geo_effectscatter()# 渲染地圖 c.render()# 生成圖片 make_snapshot(snapshot, c.render(), "map_marked.png")生成的中國地圖可是高清大圖,高達7M哦!
你要是愿意,甚至可以更改地圖的顏色,標點的顏色,每個區(qū)域的顏色,甚至可以細化到省級、市級角度,詳細請見官方文檔:
pyecharts: https://pyecharts.org
如果你想看更多自定義的方法,請閱讀:
echarts原始功能: https://echarts.baidu.com
我們的文章到此結(jié)束啦!如果你喜歡我們的文章,請持續(xù)關注Python實用寶典哦!請記住我們的官方網(wǎng)站:https://pythondict.com , 公眾號:python實用寶典。的 Python實戰(zhàn)教程
總結(jié)
以上是生活随笔為你收集整理的python绘制一份完美的中国地图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue-cli3.0 + echarts
- 下一篇: 手机java安装_花样繁多 MOTO手机