您好,登錄后才能下訂單哦!
安裝
pip(3) install pyecharts
此文版本為v1.6
此文版本為v1.6
此文版本為v1.6
效果圖
使用Pycharts繪制一個如上圖類似的全球流向圖。
pyecharts里的地理圖標總共有三種—
Geo:地理坐標系,Map:地圖,Bmap:百度地圖。
Map地圖可以繪制全球地圖,但不能繪制帶有流向的效果圖,所以此處需要使用Geo地理坐標系圖。
Geo圖的類型有scatter(散點圖),effectScatter(漣漪散點圖),heatmap(熱力圖),lines(流向圖)。
散點圖不用說,就是正常的散點圖。漣漪散點圖類似帶有波紋的散點圖,像水的漣漪效果一樣。
效果如下:
熱力圖也不用說,就是正常的熱力圖效果。
我們需要繪制的是流向圖。
# 導(dǎo)入Geo包,注意1.x版本的導(dǎo)入跟0.x版本的導(dǎo)入差別 from pyecharts.charts import Geo # 導(dǎo)入配置項 from pyecharts import options as opts # ChartType:圖標類型,SymbolType:標記點類型 from pyecharts .globals import ChartType, SymbolType geo = Geo() # 地圖類型,世界地圖可換為world geo.add_schema(maptype="china") # 添加數(shù)據(jù)點 geo.add("",[("北京",10),("上海",20),("廣州",30),("成都",40),("哈爾濱",50)],type_=ChartType.EFFECT_SCATTER) # 添加流向,type_設(shè)置為LINES,漣漪配置為箭頭,提供的標記類型包括 'circle', 'rect', 'roundRect', 'triangle', #'diamond', 'pin', 'arrow', 'none' geo.add("geo-lines", [("上海","廣州"), ("上海","新疆"), ("上海","哈爾濱"), ("成都","北京"), ("哈爾濱","廣州")], type_=ChartType.LINES, effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,symbol_size=5,color="yellow"), linestyle_opts=opts.LineStyleOpts(curve=0.2), is_large=True) # 不顯示標簽 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 設(shè)置圖標標題,visualmap_opts=opts.VisualMapOpts()為左下角的視覺映射配置項 geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),title_opts=opts.TitleOpts(title="Geo-Lines")) # 直接在notebook里顯示圖表 geo.render_notebook() # 生成html文件,可傳入位置參數(shù) geo.render("mychart.html")
效果如圖:
在繪制國內(nèi)的流向圖的時候是沒有問題的,但是當我們把地點換為國際城市或者其他國家的時候就是報錯了。
因為Geo圖的坐標引用自pyecharts.datasets.city_coordinates.json。我們打開這和文件可以看到國內(nèi)的城市坐標。這個文件里的全部數(shù)據(jù)都是國內(nèi)的城市,當我們想繪制全球的流向圖的時候,Geo引用找不到國際地點就i會報錯了。
解決辦法有兩個:
1.新增坐標點
def add_coordinate( # 坐標地點名稱 name: str, # 經(jīng)度 longitude: Numeric, # 緯度 latitude: Numeric, )
from pyecharts import options as opts from pyecharts.charts import Geo from pyecharts .globals import ChartType, SymbolType, GeoType geo = Geo() # 新增坐標點,添加名稱跟經(jīng)緯度 geo.add_coordinate(name="China",longitude=104.195,latitude=35.675) geo.add_coordinate(name="Australia",longitude=133.775,latitude=-25.274) geo.add_coordinate(name="Brazil",longitude=-51.925,latitude=-14.235) geo.add_coordinate(name="South Africa",longitude=22.937,latitude=-30.559) geo.add_coordinate(name="India",longitude=78.962,latitude=20.593) geo.add_coordinate(name="Peru",longitude=-75.015,latitude=-9.189) geo.add_coordinate(name="Iran",longitude=53.688,latitude=32.427) geo.add_coordinate(name="Ukraine",longitude=31.165,latitude=48.379) geo.add_coordinate(name="Canada",longitude=-106.346,latitude=56.130) geo.add_coordinate(name="Mongolia",longitude=103.847,latitude=46.862) geo.add_coordinate(name="Russia",longitude=37.618,latitude=55.751) geo.add_coordinate(name="Mauritania",longitude=21.008,latitude=-10.941) geo.add_coordinate(name="Kazakhstan",longitude=66.924,latitude=48.019) geo.add_coordinate(name="UAE",longitude=53.848,latitude=23.424) geo.add_coordinate(name="Malaysia",longitude=101.976,latitude=4.210) geo.add_coordinate(name="New Zealand",longitude=174.886,latitude=-40.900) geo.add_coordinate(name="Indonesia",longitude=113.921,latitude=-0.789) geo.add_coordinate(name="Sweden",longitude=18.643,latitude=60.128) geo.add_coordinate(name="Mexico",longitude=-102.553,latitude=23.634) geo.add_coordinate(name="Sierra Leone",longitude=-11.779,latitude=8.461) # 添加數(shù)據(jù)項 geo.add_schema(maptype="world") geo.add("",[("Australia",128326), ("Brazil",44037), ("South Africa",7649), ("India",3562), ("Peru",2779), ("Iran",2698), ("Ukrainie",2040), ("Canada",1792), ("Mongolia",1514), ("Russia",1069), ("Mauritania",1374), ("Kazakhsan",701), ("UAE",490), ("Malaysia",554), ("New Zealand",422), ("Indonesia",148), ("Sweden",113), ("Mexico",121), ("Sierra Leone",109), ],type_=ChartType.EFFECT_SCATTER) # 繪制流向 geo.add("流向圖",[ ("Australia","China"), ("Brazil","China"), ("South Africa","China"), ("India","China"), ("Peru","China"), ("Iran","China"), ("Ukraine","China"), ("Canada","China"), ("Mongolia","China"), ("Russia","China"), ("Mauritania","China"), ("Kazakhstan","China"), ("UAE","China"), ("Malaysia","China"), ("New Zealand","China"), ("Indonesia","China"), ("Sweden","China"), ("Mexico","China"), ("Sierra Leone","China"), ], type_= GeoType.LINES, effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,symbol_size=5,color="yellow"), linestyle_opts=opts.LineStyleOpts(curve=0.2), ) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=130000),title_opts=opts.TitleOpts(title="mygeo")) geo.render()
效果如下:顏色表示各數(shù)據(jù)點大小。(用線條粗細表示大小還不知道,知道的盆友可以告訴我)
這種添加坐標點的辦法太麻煩了,需要手動一個個添加,十分不方便。
2.添加坐標點文件。
以JSON文件格式批量新增坐標點。
def add_coordinate_json( # json 文件格式的坐標數(shù)據(jù) # 格式如下 # { # "阿城": [126.58, 45.32], # "阿克蘇": [80.19, 41.09] # } json_file: str )
如果我們有一份全球的數(shù)據(jù)坐標點文件我們就可以使用這個添加文件的方式批量導(dǎo)入坐標點。
geo.add_coordinate_json(json_file="world_country.json")
可以直接用這一步替代添加坐標點的步驟。
world_country.json如下圖所示。
它是一個各個國家的名稱及坐標點文件。導(dǎo)入之后就可以添加數(shù)據(jù)項了。
還可以直接把這個文件追加到pyechats.datasets.city_coordinates.json文件里 ,這樣就可以一勞永逸,下次直接寫國家名稱的時候就可以讀取到。
繪制全球流向圖就完成了。
其他細節(jié)可以參考官方文檔:http://pyecharts.org/#/zh-cn/
渲染成圖片
API:
def make_snapshot( # 渲染引擎,可選 selenium 或者 phantomjs engine: Any, # 傳入 HTML 文件路徑 file_name: str, # 輸出圖片路徑 output_name: str, # 延遲時間,避免圖還沒渲染完成就生成了圖片,造成圖片不完整 delay: float = 2, # 像素比例,用于調(diào)節(jié)圖片質(zhì)量 pixel_ratio: int = 2, # 渲染完圖片是否刪除原 HTML 文件 is_remove_html: bool = False, # 瀏覽器類型,目前僅支持 Chrome, Safari,使用 snapshot-selenium 時有效 browser: str = "Chrome", **kwargs, )
使用:
from pyecharts.render import make_snapshot from snapshot_selenium import snapshot make_snapshot(snapshot,"全球流向.html","流向2.png",delay=5)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。