国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

瀏覽:7日期:2022-08-01 16:52:30

最近要繪制倫敦區(qū)地圖,查閱了很多資料后最終選擇使用bokeh包以及倫敦區(qū)的geojson數(shù)據(jù)繪制。bokeh是基于python的繪圖工具,可以繪制各種類型的圖表,支持geojson數(shù)據(jù)的讀取及繪制地圖。

安裝bokeh

$ pip install bokeh

軟件版本

python-3.7.7bokeh-2.0.0

數(shù)據(jù)來源

倫敦地圖數(shù)據(jù)來源于Highmaps地圖數(shù)據(jù)集。下載的是英國的地圖數(shù)據(jù)united-kindom.geo.json。需要對得到的數(shù)據(jù)進(jìn)行預(yù)處理才能得到只含倫敦地區(qū)的數(shù)據(jù)。這需要對geojson數(shù)據(jù)的格式有一定的了解。在對數(shù)據(jù)進(jìn)行處理之前,先看如何繪制英國地圖。

繪制英國地圖

from bokeh.plotting import curdoc, figurefrom bokeh.models import GeoJSONDataSource# 讀入英國地圖數(shù)據(jù)并傳給GeoJSONDataSourcewith open('united-kindom.geo.json', encoding='utf8') as f: geo_source = GeoJSONDataSource(geojson=f.read())# 設(shè)置一張畫布p = figure(width=500, height=500)# 使用patches函數(shù)以及geo_source繪制地圖p.patches(xs=’xs’, ys=’ys’, source=geo_source)curdoc().add_root(p)

上述代碼可以繪制出英國地圖。將上述代碼保存為test.py,在終端運(yùn)行

$ bokeh serve --show test.py

這會自動打開瀏覽器,并顯示英國地圖。運(yùn)行結(jié)果如圖:

Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

獲取倫敦地區(qū)數(shù)據(jù)

獲取倫敦地區(qū)數(shù)據(jù)可以手動從united-kingdom.geo.json文件中篩選出倫敦的數(shù)據(jù),也可以先用python先把數(shù)據(jù)過濾一遍,然后將數(shù)據(jù)傳給bokeh。這需要對geojson文件格式有一定的了解,在此不詳細(xì)介紹。

from bokeh.plotting import curdoc, figurefrom bokeh.models import GeoJSONDataSourceimport json# 用json庫讀取數(shù)據(jù)with open('united-kindom.geo.json', encoding='utf8') as f: data = json.loads(f.read())# 判斷是不是倫敦地區(qū)數(shù)據(jù)def isInLondon(district): if ’type’ in district[’properties’] and ’london borough’ in district[’properties’][’type’].lower(): return True if ’type-en’ in district[’properties’] and ’london borough’ in district[’properties’][’type’].lower(): return True if ’woe-name’ in district[’properties’] and ’city of london’ in district[’properties’][’woe-name’].lower(): return True return False# 過濾數(shù)據(jù)data[’features’] = list(filter(isInLondon, data[’features’]))#geo_source = GeoJSONDataSource(geojson=json.dumps(data))p = figure(width=500, height=500)p.patches(xs=’xs’, ys=’ys’, source=geo_source)curdoc().add_root(p)

運(yùn)行結(jié)果如圖:

Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

美化

上面的倫敦地圖只是一個(gè)大概的輪廓,下面對地圖添加一系列功能。

添加各區(qū)輪廓線

p.patches(xs=’xs’, ys=’ys’, fill_alpha=0.7, # 畫輪廓線 line_color=’white’, # 線的顏色 line_width=0.5, # 線的寬度 source=geo_source)

現(xiàn)在地圖區(qū)域輪廓很清晰。

添加顏色

# 為每一個(gè)地區(qū)增加一個(gè)color屬性for i in range(len(data[’features’])): data[’features’][i][’properties’][’color’] = [’blue’, ’red’, ’yellow’, ’orange’, ’gray’, ’purple’][i % 6]p.patches(xs=’xs’, ys=’ys’, fill_alpha=0.7, line_color=’white’, line_width=0.5, color='color', # 增加顏色屬性,這里的'color'對應(yīng)每個(gè)地區(qū)的color屬性 source=geo_source)

現(xiàn)在地圖五顏六色。

增加圖注

import random# 隨機(jī)產(chǎn)生數(shù)據(jù)用于展示for i in range(len(data[’features’])): data[’features’][i][’properties’][’number’] = random.randint(0, 20_000)p = figure(width=500, height=500, tooltips='@name, number: @number' # 使用tooltips生成圖注,@+屬性名稱,這里的name是數(shù)據(jù)中原本有的,number是新近添加的。 )

現(xiàn)在鼠標(biāo)放到區(qū)域上時(shí),會顯示'區(qū)域名, number: 數(shù)字'。

去掉坐標(biāo)軸與背景線

p.axis.axis_label = Nonep.axis.visible = Falsep.grid.grid_line_color = None

最終代碼

from bokeh.plotting import curdoc, figurefrom bokeh.models import GeoJSONDataSourceimport jsonimport randomwith open('united-kindom.geo.json', encoding='utf8') as f: data = json.loads(f.read())def isInLondon(district): if ’type’ in district[’properties’] and ’london borough’ in district[’properties’][’type’].lower(): return True if ’type-en’ in district[’properties’] and ’london borough’ in district[’properties’][’type’].lower(): return True if ’woe-name’ in district[’properties’] and ’city of london’ in district[’properties’][’woe-name’].lower(): return True return Falsedata[’features’] = list(filter(isInLondon, data[’features’]))for i in range(len(data[’features’])): data[’features’][i][’properties’][’color’] = [’blue’, ’red’, ’yellow’, ’orange’, ’gray’, ’purple’][i % 6] data[’features’][i][’properties’][’number’] = random.randint(0, 20_000)geo_source = GeoJSONDataSource(geojson=json.dumps(data))p = figure(width=500, height=500, tooltips='@name, number: @number')p.patches(xs=’xs’, ys=’ys’, fill_alpha=0.7, line_color=’white’, line_width=0.5, color='color', source=geo_source)p.axis.axis_label = Nonep.axis.visible = Falsep.grid.grid_line_color = Nonecurdoc().add_root(p)

倫敦地圖完成了

Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

總結(jié)

最開始想用pyecharts做的,但是pyecharts并沒有倫敦的地圖。折騰半天,最后只好自己找geojson數(shù)據(jù)來畫地圖。

找到了很多關(guān)于地圖的數(shù)據(jù)和工具,比如上文中提到的highmap數(shù)據(jù)集,以及DataV.altas,這個(gè)工具可以可視化地提取中國區(qū)域的地圖數(shù)據(jù),但感覺比起自己找數(shù)據(jù),畫中國地圖還是pyecharts來得實(shí)在。

數(shù)據(jù)最重要。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 一区二区高清在线 | 97se狠狠狠狠狠亚洲综合网 | 国产精品欧美日韩一区二区 | 免费在线观看毛片 | 日韩 国产 欧美 精品 在线 | 黄a视频 | 99视频在线观看视频 | 国产精品成人观看视频网站 | www.色片| 手机看片国产 | 亚洲三级黄 | 日韩永久在线观看免费视频 | 久久精品国产欧美日韩99热 | 欧美成人福利 | 亚洲精品区在线播放一区二区 | 免费黄网在线观看 | 韩国毛片在线 | 久久综合亚洲一区二区三区 | 女性无套免费网站在线看 | 久草手机在线观看 | 黑色丝袜美美女被躁视频 | 天堂中文字幕 | 天堂av影院 | 黄色网址在线免费观看 | 国产欧美日韩视频免费61794 | 日韩视频在线观看中字 | 日韩 亚洲 制服 欧美 综合 | 国产精品久久影院 | 国产欧美日韩免费一区二区 | 午夜免费成人 | 黄人成a动漫片免费网站 | 最新国产三级在线不卡视频 | 一级特黄国产高清毛片97看片 | 99在线视频观看 | 国产三级在线视频观看 | 久久免费成人 | 99爱在线精品视频免费观看9 | 精品72久久久久久久中文字幕 | 偷自拍 | 91免费版网站| 久久综合香蕉久久久久久久 |