您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Geo函數(shù)怎么在Pyecharts 中使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
pyecharts 是一個(gè)用于生成 Echarts 圖表的類庫(kù)。用 Echarts 生成的圖可視化效果很不錯(cuò),pyecharts庫(kù)是用來(lái)與 Python 進(jìn)行對(duì)接,方便在 Python 中直接使用數(shù)據(jù)生成圖。
最新的Pyecharts庫(kù)版本是v1,且與老版本 v0.5.X 是不兼容的,v0.5.X版本也已不再維護(hù)。新舊版本的Geo有著較大改動(dòng),本篇均是基于舊版本0.5.11
pyecharts的安裝說(shuō)明很簡(jiǎn)單,也有很多大佬寫(xiě)了過(guò)程,本篇不贅述,主要說(shuō)一下指定版本的問(wèn)題。
安裝pyecharts
Pyecharts v1版本的安裝可使用pip install pyecharts -U
Pyecharts v0.5.X版本的安裝可使用pip install pyecharts==0.5.11
安裝對(duì)應(yīng)的地圖拓展
pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg pip install echarts-china-counties-pypkg pip install echarts-china-misc-pypkg
全球國(guó)家地圖:echarts-countries-pypkg (1.9MB)
中國(guó)省級(jí)地圖:echarts-china-provinces-pypkg (730KB)
中國(guó)市級(jí)地圖:echarts-china-cities-pypkg (3.8MB)
中國(guó)區(qū)縣地圖:echarts-china-counties-pypkg
中國(guó)大區(qū)地圖:echarts-china-misc-pypkg(如:華南、華北等)
geo=Geo()是畫(huà)出地圖的背景。
Geo(title,subtitle,width,height,title_pos,title_top,title_color,subtitle_color,title_text_size,subtitle_text_size,background_color,page_title,renderer,is_animation)
各參數(shù)說(shuō)明如下。
實(shí)際使用過(guò)程中,我們其實(shí)經(jīng)常用到的就幾個(gè)參數(shù),如title,width,height,background_color,只要搞這幾個(gè)基本就夠用了,所有參數(shù)都有默認(rèn)值,這意味著在最極端情況下,直接用Geo()也可以,不過(guò)畫(huà)出來(lái)的就是一張白紙罷了。
Init docstring: :param title: 主標(biāo)題文本,支持換行,默認(rèn)為 "" :param subtitle: 副標(biāo)題文本,支持換行,默認(rèn)為 "" :param width: 畫(huà)布寬度,默認(rèn)為 800(px) :param height: 畫(huà)布高度,默認(rèn)為 400(px) :param title_pos: 標(biāo)題距離左側(cè)距離,默認(rèn)為'left',有'auto', 'left', 'right', 'center'可選,也可為百分比或整數(shù) :param title_top: 標(biāo)題距離頂部距離,默認(rèn)為'top',有'top', 'middle', 'bottom'可選, 也可為百分比或整數(shù) :param title_color: 主標(biāo)題文本顏色,默認(rèn)為 '#000' :param subtitle_color: 副標(biāo)題文本顏色,默認(rèn)為 '#aaa' :param title_text_size: 主標(biāo)題文本字體大小,默認(rèn)為 18 :param subtitle_text_size: 副標(biāo)題文本字體大小,默認(rèn)為 12 :param background_color: 畫(huà)布背景顏色,默認(rèn)為 '#fff' :param page_title: 指定生成的 html 文件中 <title> 標(biāo)簽的值。默認(rèn)為 'Echarts' :param renderer: 指定使用渲染方式,有 'svg' 和 'canvas' 可選,默認(rèn)為 'canvas'。 3D 圖僅能使用 'canvas'。 :param extra_html_text_label: 額外的 HTML 文本標(biāo)簽,(<p> 標(biāo)簽)。類型為 list,list[0] 為文本內(nèi)容, list[1] 為字體風(fēng)格樣式(選填)。如 ["this is a p label", "color:red"] :param is_animation: 是否開(kāi)啟動(dòng)畫(huà),默認(rèn)為 True。V0.5.9+
舉例子:
from pyecharts import Geo geo =Geo("Geo地圖示例", "副標(biāo)題",width=500, height=500, title_pos='center',title_top=20, title_color="#2E2E2E", subtitle_color='#aaa',title_text_size=16,subtitle_text_size=12,background_color='#EEEEE8', page_title='Echarts',renderer='canvas',is_animation=True) geo
geo.add_coordinate()的作用就是新增,比如現(xiàn)在調(diào)用一張廣州地圖,現(xiàn)在要在顯示一個(gè)特定的點(diǎn)“測(cè)試1”,像這樣的點(diǎn)就必須用add_coordinate新增進(jìn)去,否則會(huì)報(bào)錯(cuò)(ValueError: No coordinate is specified for 測(cè)試1)。
geo.add_coordinate(點(diǎn)名稱,經(jīng)度,緯度),3個(gè)參數(shù)都是必填項(xiàng)
geo.add_coordinate('測(cè)試點(diǎn)1',113.40,23.07)
geo.add()的作用就是將點(diǎn)展示到上面加載的地圖上,add有一大堆的參數(shù),最常用的是series_name、names、value、type、maptype、is_visualmap、visual_range、visual_text_color、symbol_size,其中series_name、names、value、maptype這四個(gè)是必填項(xiàng)
# 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。 series_name: str, # 數(shù)據(jù)項(xiàng) (坐標(biāo)點(diǎn)名稱) names:list # 數(shù)據(jù)項(xiàng) (坐標(biāo)點(diǎn)值) value: list # Geo 圖類型,有 scatter, effectScatter, heatmap, lines 4 種 type: 默認(rèn)"scatter", # 是否選中圖例 is_selected: 默認(rèn)True, # 標(biāo)記圖形形狀,circle,pin,rect,diamon,roundRect,arrow,triangle symbol: 默認(rèn)circle, # 標(biāo)記的大小 symbol_size: 默認(rèn)12, # 系列 label 顏色 color: 默認(rèn)None, # 是否是多段線,在畫(huà) lines 圖情況下 is_polyline: 默認(rèn) False, # 是否啟用大規(guī)模線圖的優(yōu)化,在數(shù)據(jù)圖形特別多的時(shí)候(>=5k)可以開(kāi)啟 is_large: 默認(rèn) False, # 特效尾跡的長(zhǎng)度。取從 0 到 1 的值,數(shù)值越大尾跡越長(zhǎng)。 trail_length:默認(rèn) 0.2 # 地圖選擇,如廣東、廣州、china maptype #不知道什么作用,只知道默認(rèn)Ture is_random #是否開(kāi)啟鼠標(biāo)縮放和平移漫游。'scale'縮放、'move'平移、'True'都開(kāi)啟 is_roam:默認(rèn)True #顯示圖例條 is_visualmap:默認(rèn)True #圖例條范圍 visual_range #圖例條顏色 visual_text_color #常態(tài)下地圖的顏色 geo_normal_color #觸發(fā)下地圖的顏色(鼠標(biāo)放在地圖上) geo_emphasis_color #漣漪的多少,當(dāng)type="effectScatter"時(shí)才有效 effect_scale #顯示標(biāo)簽 is_label_show #標(biāo)簽顏色 label_text_color #標(biāo)簽位置(inside,top,bottom,left,right) label_pos:默認(rèn)"inside" #邊界顏色 border_color
舉例子
from pyecharts import Geo districts=['荔灣區(qū)', '花都區(qū)', '番禺區(qū)','測(cè)試點(diǎn)1'] value = [ 200, 200,300,400] geo =Geo("Geo地圖示例", "副標(biāo)題",width=500, height=500, title_pos='center',title_top=20, title_color="#2E2E2E", subtitle_color='#aaa',title_text_size=16,subtitle_text_size=12,background_color='#EEEEE8', page_title='Echarts',renderer='canvas',is_animation=True) geo.add_coordinate('測(cè)試點(diǎn)1',113.40,23.07) geo.add("系列名1", districts, value,type="effectScatter",is_selected=True,symbol='circle',symbol_size=20,color=None, maptype='廣州',is_roam=True,is_visualmap=True, visual_range=[0,500],visual_text_color="#2E2E2E", geo_normal_color="#323c48",geo_emphasis_color='#2a033d', effect_scale=3, is_label_show=True,label_text_color="#00FF00",label_pos="inside" ) geo.render("廣州測(cè)試2.html") geo
在這里有2個(gè)問(wèn)題還沒(méi)解決。第一、不知道is_random參數(shù)的作用,感覺(jué)不管是True或False都沒(méi)影響;第二、如上圖的series_name “系列名1”,不知道如何改變它的位置,如移動(dòng)到左邊右邊等。
geo.render()很簡(jiǎn)單了,就是將地圖保存為文件出來(lái),render只有一個(gè)參數(shù),就是path路徑
geo.render("廣州測(cè)試2.html")
補(bǔ)充:Pyecharts v1 Geo庫(kù)的一些更新與應(yīng)用
最近在利用Python進(jìn)行爬蟲(chóng)的過(guò)程中,需要對(duì)網(wǎng)頁(yè)中爬取的數(shù)據(jù)做一些可視化的處理,其中有部分?jǐn)?shù)據(jù)是關(guān)于地區(qū)分布的,在地圖上標(biāo)注出具體的參數(shù)分布將使得數(shù)據(jù)更加的直觀與生動(dòng)。
地圖標(biāo)注的工具我選擇使用的是Pyecharts庫(kù)中Geo,運(yùn)行在Pycharm下,值得注意的是,最新的Pyecharts庫(kù)版本是v1, 是最新的版本,且與老版本 v0.5.X 是不兼容的,v0.5.X版本也已不再維護(hù),所以建議以后盡量應(yīng)用最新的v1版,本文也將在此對(duì)其進(jìn)行一些Geo庫(kù)的更新應(yīng)用的說(shuō)明。
Pyecharts v1版本的安裝可使用pip install pyecharts -U,也可直接在Pycharm中安裝Pyecharts,其說(shuō)明文檔地址為https://pyecharts.org/#/zh-cn/intro
Pyecharts v0.5.X版本的安裝可使用pip install pyecharts==0.5.11,其說(shuō)明文檔地址為https://05x-docs.pyecharts.org/#/zh-cn/prepare
新版本Pyecharts中的地理圖表Geo有著較大的改動(dòng),總的一個(gè)最直觀的更新感受是,新的庫(kù)沒(méi)有以前那么繁瑣了,應(yīng)用起來(lái)更簡(jiǎn)單直接。因?yàn)楸救藙偨佑|Python,很多東西也是剛剛?cè)腴T(mén),現(xiàn)階段也只是達(dá)到能夠初步使用Geo的程度,在探索使用新版本的過(guò)程中發(fā)現(xiàn)網(wǎng)上關(guān)于新板Pyecharts的說(shuō)明很少,所以在這里將自己遇到的一些問(wèn)題以及自己的一些見(jiàn)解整理出來(lái),以下的一些說(shuō)明與理解可能較為粗淺,萬(wàn)望各位讀者見(jiàn)諒。
Geo:地理坐標(biāo)系
Geo作為一個(gè)地理坐標(biāo)標(biāo)注的工具,在功能上新老版本基本是一致的,但在細(xì)節(jié)上卻有著很大的差別,這也導(dǎo)致了新舊代碼是完全不通用的。
在v0.5.X版本中在創(chuàng)建geo的過(guò)程中是可以對(duì)其進(jìn)行一些基本參數(shù)設(shè)定的
如以說(shuō)明文檔中的例子:
geo = Geo("全國(guó)主要城市空氣質(zhì)量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color="#404a59", )
可以設(shè)定主標(biāo)題,副標(biāo)題,標(biāo)題顏色為止,圖表大小,背景顏色等。
但在新版本中繼續(xù)按照這樣的格式進(jìn)行創(chuàng)建時(shí),編譯器報(bào)錯(cuò)AttributeError: 'str' object has no attribute 'get',沒(méi)有這樣的對(duì)象。在新版文檔中對(duì)Geo是直接進(jìn)行創(chuàng)建的geo = Geo(),其實(shí)這樣創(chuàng)建基本也就可以了,但是如果你真的想對(duì)其進(jìn)行更多的參數(shù)設(shè)置,當(dāng)然也是可以的。
在新的庫(kù)中,對(duì)Geo的操作統(tǒng)一放在init_opts中,對(duì)其進(jìn)行更改需要統(tǒng)一的對(duì)類opts.InitOpts進(jìn)行修改,這里我們就需要引入from pyecharts import options as opts才能進(jìn)行調(diào)用。
具體的InitOpts包括以下一些參數(shù)
class InitOpts(BasicOpts): def __init__( self, width: str = "900px", height: str = "500px", chart_id: Optional[str] = None, renderer: str = RenderType.CANVAS, page_title: str = CurrentConfig.PAGE_TITLE, theme: str = ThemeType.WHITE, bg_color: Union[str, dict] = None, js_host: str = "", animation_opts: Union[AnimationOpts, dict] = AnimationOpts(), ): self.opts: dict = { "width": width, "height": height, "chart_id": chart_id, "renderer": renderer, "page_title": page_title, "theme": theme, "bg_color": bg_color, "js_host": js_host, "animationOpts": animation_opts, }
需要注意的是對(duì)opt.InitOpts直接進(jìn)行配置的話,只能對(duì)部分參數(shù)進(jìn)行更改,如bg_color等,而width,height等參數(shù)是固定的無(wú)法修改的,比如如果這樣設(shè)定
geo = Geo(init_opts = opts.InitOpts("aaa", width = 400, height = 200, bg_color = "#404a59"))
將報(bào)TypeError: init() got multiple values for argument 'width'多賦值的錯(cuò)誤。好在新版本除了提供Opts 配置項(xiàng)作為參數(shù)傳入,還提供了原生 dict 作為參數(shù)配置,所有參數(shù)均可以自己任意定義,具體操作代碼是
geo = Geo(init_opts = {"width":1600,"chart_id":"ceshi","bg_color":"#404a59"})
這里發(fā)現(xiàn)了一個(gè)奇怪的現(xiàn)象,當(dāng)更改height參數(shù)時(shí),將直接導(dǎo)致地圖標(biāo)注無(wú)圖像,至今未明白其中的原因。
add_schema是Geo下的一個(gè)函數(shù),具體功能是對(duì)地圖的參數(shù)與功能進(jìn)行一些配置,主要包括有
def add_schema( # 地圖類型,具體參考 pyecharts.datasets.map_filenames.json 文件 maptype: str = "china", # 是否開(kāi)啟鼠標(biāo)縮放和平移漫游。 is_roam: bool = True, # 當(dāng)前視角的縮放比例。默認(rèn)為 1 zoom: Optional[Numeric] = None, # 當(dāng)前視角的中心點(diǎn),用經(jīng)緯度表示。例如:center: [115.97, 29.71] center: Optional[Sequence] = None, # # 標(biāo)簽配置項(xiàng),參考 `series_options.LabelOpts` label_opts: Union[opts.LabelOpts, dict, None] = None, # 地圖區(qū)域的多邊形 圖形樣式。 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] =None, # 高亮狀態(tài)下的多邊形樣式 emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict,None] = None, # 高亮狀態(tài)下的標(biāo)簽樣式。 emphasis_label_opts: Union[opts.LabelOpts, dict, None] =None, ):
這里我只使用過(guò)maptype,zoom,label_opts的設(shè)置,具體設(shè)置如下
geo.add_schema(maptype = "china", zoom = 1, label_opts = opts.LabelOpts(is_show=True))
maptype可替換成世界地圖,省份地圖等,地圖資源可通過(guò)以下
pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg pip install echarts-china-counties-pypkg pip install echarts-china-misc-pypkg
zoom是縮放設(shè)置,label_opts是標(biāo)簽設(shè)置,如同1中的設(shè)置,這里也是可以通過(guò)原生dict進(jìn)行自定義設(shè)置的。
Geo中可以自己增加需要標(biāo)注的坐標(biāo)點(diǎn),通過(guò)設(shè)置地點(diǎn),經(jīng)度,緯度這三個(gè)參數(shù)即可完成添加。
def add_coordinate( # 坐標(biāo)地點(diǎn)名稱 name: str, # 經(jīng)度 longitude: Numeric, # 緯度 latitude: Numeric, )
這個(gè)函數(shù)和舊版是一致的,應(yīng)用也非常簡(jiǎn)單,此處不再多加贅述,舉一個(gè)簡(jiǎn)單的例子
geo.add_coordinate("標(biāo)注地點(diǎn)", 120, 80)
這是Geo中最主要的函數(shù)模塊,可供設(shè)置的參數(shù)類型也比較多,新版的add函數(shù)結(jié)構(gòu)與以前相比也有較大的改動(dòng),相關(guān)的參數(shù)如下所示
def add( # 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。 series_name: str, # 數(shù)據(jù)項(xiàng) (坐標(biāo)點(diǎn)名稱,坐標(biāo)點(diǎn)值) data_pair: Sequence, # Geo 圖類型,有 scatter, effectScatter, heatmap, lines 4 種,建議使用 # from pyecharts.globals import GeoType # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES type_: str = "scatter", # 是否選中圖例 is_selected: bool = True, # 標(biāo)記圖形形狀 symbol: Optional[str] = None, # 標(biāo)記的大小 symbol_size: Numeric = 12, # 系列 label 顏色 color: Optional[str] = None, # 是否是多段線,在畫(huà) lines 圖情況下 is_polyline: bool = False, # 是否啟用大規(guī)模線圖的優(yōu)化,在數(shù)據(jù)圖形特別多的時(shí)候(>=5k)可以開(kāi)啟 is_large: bool = False, # 特效尾跡的長(zhǎng)度。取從 0 到 1 的值,數(shù)值越大尾跡越長(zhǎng)。默認(rèn)值 0.2 trail_length: Numeric = 0.2, # 開(kāi)啟繪制優(yōu)化的閾值。 large_threshold: Numeric = 2000, # 標(biāo)簽配置項(xiàng),參考 `series_options.LabelOpts` label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(), # 漣漪特效配置項(xiàng),參考 `series_options.EffectOpts` effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(), # 線樣式配置項(xiàng),參考 `series_options.LineStyleOpts` linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(), # 提示框組件配置項(xiàng),參考 `series_options.TooltipOpts` tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, # 圖元樣式配置項(xiàng),參考 `series_options.ItemStyleOpts` itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None, )
其中,新舊版本最大的一個(gè)不同是,舊版的地點(diǎn)和值分開(kāi)配置給attr和value,舊版的典型示例如下
from pyecharts import Geo data = [ ("海門(mén)", 9), ("鄂爾多斯", 12), ("招遠(yuǎn)", 12), ("舟山", 12), ("齊齊哈爾", 14), ("鹽城", 15) ] geo = Geo( "全國(guó)主要城市空氣質(zhì)量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color="#404a59", ) attr, value = geo.cast(data) geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5) geo.render()
而新版的add函數(shù)將地點(diǎn)和值放在了一個(gè)數(shù)據(jù)項(xiàng)里,
geo.add("", [attr, value], type_=ChartType.HEATMAP, symbol_size = 12, label_opts = opts.LabelOpts(is_show=False))
其他一些參數(shù)配置大致與以前是一致的,配置方式也可同樣參照1中的方式進(jìn)行。
在運(yùn)行中發(fā)現(xiàn)一個(gè)有趣的問(wèn)題,如一個(gè)個(gè)對(duì)坐標(biāo)進(jìn)行顯示插入
geo.add_coordinate("測(cè)試點(diǎn)1", 20, 40) geo.add("haha1", [("測(cè)試點(diǎn)1", 60)]) geo.add_coordinate("測(cè)試點(diǎn)2", 60, 80) geo.add("haha2", [("測(cè)試點(diǎn)2", 60)])
這樣運(yùn)行是沒(méi)有問(wèn)題的,但如果對(duì)列表中的項(xiàng)進(jìn)行批量的插入,如
for i in range(num): geo.add_coordinate(address[i], lng[i], lat[i]) geo.add("", [(address[i],60)])
這樣做是會(huì)報(bào)錯(cuò)的,具體原因不是太明白,無(wú)奈只能進(jìn)行如下修改
for i in range(num): geo.add_coordinate(address[i], lng[i], lat[i]) geo.add("", [(address[i],60) for i in range(num)])
關(guān)于Geo函數(shù)怎么在Pyecharts 中使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。