在解決某一業務問題時,需要將經緯度表示的點在地圖上表示出來,這里采用 Python的
pyecharts
模塊進行解決,它提供了豐富的API接口,可以讓開發者使用Python語言實現echarts圖標設計。
版本
pyecharts
分為 v0.5.X 和 v1 兩個大版本,v0.5.X 和 v1 間不兼容,v1 是一個全新的版本。本文主要介紹如何利用 v1 版本實現畫地圖功能,而python最全畫地圖,可視化數據一文詳細介紹了利用v0.5.X版本畫地圖,大家可以參考。需要注明的是,v0.5.X支持 Python2.7、3.4+,文檔位于05x-docs.pyecharts.org,而v1僅支持 Python3.6+,文檔位于pyecharts.org。
代碼介紹
pyecharts
的地理圖表功能主要依靠兩個類Geo和Map,其中Geo實現了一個地理坐標系,地圖上的點可以與經緯度進行轉換(即可以利用經緯度向地圖中插入點,也可以獲取地圖上某一點的經緯度),實現地圖上的打點功能主要依靠Geo類來進行,而Map功能類似于Geo,但只有地圖,沒有坐標系,即地圖上的點無法與經緯度進行轉換。
# v1版本與0.5.X版本包導入方式不同
from pyecharts.charts import Geo
Geo的基本示例:
from example.commons import Faker
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
# 鏈式調用
c = (
Geo()
# 加載圖表模型中的中國地圖
.add_schema(maptype="china")
# 在地圖中加入點的屬性
.add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
# 設置坐標屬性
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 設置全局屬性
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(),
title_opts=opts.TitleOpts(title="Geo-基本示例"),
)
)
# 在 html(瀏覽器) 中渲染圖表
c.render()
# 在 Jupyter Notebook 中渲染圖表
c.render_notebook()
其中,pyecharts
中提供了豐富的地圖模型,.add_schema(maptype="china")
即是加載中國地圖模型,該地圖模型中已經加入了各個省份的坐標點。
.add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
是向地圖中加入已有坐標點的屬性,[list(z) for z in zip(Faker.provinces, Faker.values())]
中z的值為:
('廣東', 53)
('北京', 46)
('上海', 31)
('江西', 56)
('湖南', 137)
('浙江', 51)
('江蘇', 123)
地圖顯示效果如下圖所示:
Geo在圖中加入自定義的點
前邊說到,加載的中國地圖模型中已經加入了各個省份的坐標點。假如我們要在該圖中加入自定義的點,則需要利用Geo類中的add_coordinate
方法。該方法的定義為:
def add_coordinate(
# 坐標地點名稱
name: str,
# 經度
longitude: Numeric,
# 緯度
latitude: Numeric,
)
具體示例代碼如下:
from example.commons import Faker
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
# 鏈式調用
c = (
Geo()
.add_schema(maptype="china")
# 加入自定義的點,格式為
.add_coordinate("測試點", 116.39770014211535, 39.90779994986951)
# 為自定義的點添加屬性
.add("geo", [("測試點", 51)])
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="加入自定義的點"))
)
# 在 html(瀏覽器) 中渲染圖表
c.render()
# 在 Jupyter Notebook 中渲染圖表
c.render_notebook()
顯示效果如下: