电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python如何使用bokeh包和geojson數據繪制地圖

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

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

安裝bokeh

$ pip install bokeh

軟件版本

python-3.7.7bokeh-2.0.0

數據來源

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

繪制英國地圖

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

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

$ bokeh serve --show test.py

這會自動打開瀏覽器,并顯示英國地圖。運行結果如圖:

Python如何使用bokeh包和geojson數據繪制地圖

獲取倫敦地區數據

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

from bokeh.plotting import curdoc, figurefrom bokeh.models import GeoJSONDataSourceimport json# 用json庫讀取數據with 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 False# 過濾數據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)

運行結果如圖:

Python如何使用bokeh包和geojson數據繪制地圖

美化

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

添加各區輪廓線

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

現在地圖區域輪廓很清晰。

添加顏色

# 為每一個地區增加一個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'對應每個地區的color屬性 source=geo_source)

現在地圖五顏六色。

增加圖注

import random# 隨機產生數據用于展示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是數據中原本有的,number是新近添加的。 )

現在鼠標放到區域上時,會顯示'區域名, number: 數字'。

去掉坐標軸與背景線

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數據繪制地圖

總結

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

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

數據最重要。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 免费网站网址收录网_海企优网站推荐平台| PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 瓶盖扭矩仪(扭力值检测)-百科| 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 原子吸收设备-国产分光光度计-光谱分光光度计-上海光谱仪器有限公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 芝麻黑-芝麻黑石材厂家-永峰石业| 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 贵州自考_贵州自学考试网 |