Pyecharts中Map和Geo的使用笔记
文章目錄
-
- 1. Geo/Map中如何自定義(增加/修改)經緯度坐標?
-
-
-
- 相關文檔:
- 本地源文件
-
- 1. pyecharts 自帶的datasets(json)
- 2. 額外安裝的地圖文件包
- ?依賴情況
- 如果輸入了不存在的地點名稱會發生什么?
-
- Geo中的解決方案:
- Map中的解決方案:
- 其他問題
-
-
- 2. Geo/Map中地圖上圓點上方數值顯示的是經緯度數值,能否顯示地圖坐標名稱和數值?
-
-
- Map
- Geo
-
- 回調函數方法顯示標簽
- 更多擴展:#TODO
-
我使用的Pyecharts 版本:v 0.5.11
官方文檔: https://05x-docs.pyecharts.org/#/
1. Geo/Map中如何自定義(增加/修改)經緯度坐標?
相關文檔:
- 自定義地圖:https://05x-docs.pyecharts.org/#/zh-cn/customize_map?id=version-057
- 地理地圖數據:https://05x-docs.pyecharts.org/#/zh-cn/datasets?id=提供自定義數據
- 提供自定義數據:https://github.com/pyecharts/geo-region-coords
本地源文件
1. pyecharts 自帶的datasets(json)
數據格式如下:
2. 額外安裝的地圖文件包
自從 v0.3.2 開始, pyecharts 將不再自帶地圖 js 文件。如需要用到地圖圖表,需自行安裝對應的地圖文件包。
在本地的位置:
例如我的在:C:UsersadminAnaconda3Libsite-packagesecharts_china_cities_pypkg
數據格式如下:
依賴情況
據我的研究,Geo依賴的是 1. pyecharts 自帶的datasets(city_coordinates.json);Map依賴的是 2. 額外安裝的地圖文件包。(如果不對請指正,感謝~)
如果輸入了不存在的地點名稱會發生什么?
在Geo中:會報錯。例如:
from pyecharts import Geo
districts=[‘白云區’, ‘從化區’, ‘番禺1111區’, ]
value = [1, 2, 3,]
geo = Geo(“Geo地圖示例”, “”,title_pos=‘center’, width=1000, height=1000)
geo.add("",
districts, value, maptype=‘廣州’,
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
)
geo.render()
geo
地圖文件中不存在 “番禺1111區”,程序報錯:
這時候,
Geo中的解決方案:
可以在源文件中直接修改或添加經緯度坐標位置;
Geo中有add_coordinate()方法,例如:
from pyecharts import Geo
districts=[‘白云區’, ‘從化區’, ‘番禺區’, ‘海珠區’, ‘花都區’, ‘黃埔區’, ‘荔灣區’, ‘南沙區’, ‘天河區’, ‘越秀區’, ‘增城區’]
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
geo = Geo(“Geo地圖示例”, “”,title_pos=‘center’, width=1000, height=1000)
geo.add_coordinate(‘南沙區’, 113.525165,22.801624)
geo.add_coordinate(‘白云區’, 113.273238,23.3)
geo.add("",
districts, value, maptype=‘廣州’,
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
label_formatter=’{b}’
)
geo
注意點:
-
如果 geo.add_coordinate 添加的地點在源文件中已經存在,則自定義添加的會覆蓋源文件中的;
-
注意在 v0.5.11版本中,我估計是不完整或者舊版本的廣州地圖,沒有“白云區”、“南沙區”,增城還是“增城市”而不是“增城區”,所以要手動修改。(Map中也有類似現象)
-
有些地點在地圖上可能過于“擁擠”(例如廣州地圖的荔灣區,白云區,天河區,海珠區),也可以通過手動修改經緯度坐標來進行調整。(Map中也有類似現象)
-
記錄一下我對廣州市11個區的經緯度坐標的調整:
geo =Geo(“廣州市地圖”)
geo.add_coordinate(‘白云區’, 113.273238,23.3)
geo.add_coordinate(‘越秀區’, 113.266835,23.128537)
geo.add_coordinate(‘海珠區’, 113.361575,23.08)
geo.add_coordinate(‘天河區’, 113.361575,23.20)
geo.add_coordinate(‘番禺區’, 113.384152,22.937556)
geo.add_coordinate(‘黃埔區’, 113.550541,23.24)
geo.add_coordinate(‘南沙區’, 113.525165,22.801624)
geo.add_coordinate(‘花都區’, 113.220463,23.403744)
geo.add_coordinate(‘從化區’, 113.586679,23.548748)
geo.add_coordinate(‘增城區’, 113.810627,23.261465)
geo.add_coordinate(‘荔灣區’, 113.23,23.05)
geo.add(’’, districts, value, maptype=‘廣州’)
在Map中:不會報錯,但該地點無法顯示,例如:
from pyecharts import Map
districts=[‘白云區’, ‘從化區’, ‘番禺11111區’]
value = [ 1, 2, 3,]
map = Map(“Map地圖示例”, “”, title_pos=‘center’, width=1000, height=1000)
map.add("",
districts, value, maptype=‘廣州’,
is_visualmap=True,
visual_range=[min(value), max(value)],
is_label_show=True ,
label_formatter=’{b}’+’{c}’,
)
map.render()
map
輸出結果如下,‘番禺11111區’ 沒有顯示:
Map中的解決方案:
注意點:
- 我發現了一個奇怪的現象:我在 2. 額外安裝的地圖文件包 的源文件中對廣州市11個區的經緯度坐標進行了調整,在 jupyter notebook 中輸出的圖沒有變化(還是擠在一起),如下:
- 但是map.render() 出來的html文件里顯示的卻是調整過后的,如下:
其他問題
(來自 https://github.com/pyecharts/pyecharts/issues/164 )
對于1:我嘗試之后發現好像還是可以縮放欸。?
對于2. Map不能自定義經緯度,沒辦法,那就只能去源文件里手動修改啦
2. Geo/Map中地圖上圓點上方數值顯示的是經緯度數值,能否顯示地圖坐標名稱和數值?
(https://github.com/pyecharts/pyecharts/issues/817 中有相關的討論)
答案是可以的,利用回調函數設置.add()中的label_formatter屬性即可。
回調函數:我自己的理解是,echarts 本身是 javascript,pyecharts 中的回調函數就是將 python 方法翻譯為 javascript 方法的函數(如果不對,還請大神指正~)
Map
先看Map中的情況:
運行如下代碼,默認顯示只顯示類目值:
輸出結果部分截圖如下:
添加參數label_formatter可以進行設置(中間還可以用“+”連接):
(來自于文檔 基本使用->圖標配置->通用配置項->label https://05x-docs.pyecharts.org/#/zh-cn/charts_configure?id=label)
例如label_formatter='{b}'+'{c}',則類目值和數值可以一起顯示了:
from pyecharts import Mapdistricts=['白云區', '從化區', '番禺區', '海珠區', '花都區', '黃埔區', '荔灣區', '南沙區', '天河區', '越秀區', '增城區'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]map = Map("Map地圖示例", "",title_pos='center', width=1000, height=1000) map.add("",districts, value,maptype='廣州', is_visualmap=True, visual_range=[min(value), max(value)],is_label_show=True , label_formatter='{b}'+'{c}',) map.render() map運行結果如下:
Geo
再來看Geo中的情況。和Map有所不同,默認的顯示的是緯度值:
from pyecharts import Geodistricts=['白云區', '從化區', '番禺區', '海珠區', '花都區', '黃埔區', '荔灣區', '南沙區', '天河區', '越秀區', '增城區'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]geo = Geo("Geo地圖示例", "",title_pos='center', width=1000, height=1000) geo.add_coordinate('南沙區',113.525165,22.801624) geo.add_coordinate('白云區', 113.273238,23.3) geo.add("", districts, value,maptype='廣州', is_visualmap=True, is_label_show=True , visual_range=[min(value), max(value)],#label_formatter='{b}'+'{c}') geo.render() geo
設置 label_formatter='{b}'+'{c}'之后會把類目值+經度+緯度+數值一起顯示出來:
回調函數方法顯示標簽
這時候就要用到回調函數了。操作如下:
先定義一個geo_formatter函數:
然后再設置label_formatter=geo_formatter即可:
from pyecharts import Geodef geo_formatter(params):return params.name + ' : '+ params.value[2]districts=['白云區', '從化區', '番禺區', '海珠區', '花都區', '黃埔區', '荔灣區', '南沙區', '天河區', '越秀區', '增城區'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]geo = Geo("Geo地圖示例", "",title_pos='center', width=1000, height=1000) geo.add_coordinate('南沙區',113.525165,22.801624) geo.add_coordinate('白云區', 113.273238,23.3) geo.add("", districts, value,maptype='廣州', is_visualmap=True, is_label_show=True , visual_range=[min(value), max(value)],#label_formatter='{b}'+'{c}'label_formatter=geo_formatter, # 重點在這里,將函數直接傳遞為參數。) geo.render() geo輸出結果如下:
上述 format 的設置方式同樣適用于:xaxis_formatter(x 軸標簽格式器),yaxis_formatter (y 軸標簽格式器),label_formatter(文本標簽格式器) ,tooltip_formatter(提示框標簽格式器)
更多擴展:#TODO
回調函數只能顯示value值,name值等,那能不能顯示針對每個城市的自定義的數值呢?(https://github.com/pyecharts/pyecharts/issues/1039)
(更新中…)
總結
以上是生活随笔為你收集整理的Pyecharts中Map和Geo的使用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进阶篇|手游联运系统营收的途径有哪些?手
- 下一篇: Android TextView 竖向显