pyecharts运行了但是没有图_新版pyecharts,Python可视化so easy and powerful !
作者:chenjiandongx
一個執(zhí)迷于寫 bug 的程序員
pyecharts V1.0.0 版本正式發(fā)布啦!
What's New in pyecharts V1
pyecharts 經(jīng)過了半年的沉寂后,終于發(fā)布了新版本啦!新版本號將從 v1.0.0 開始,這是一個全新的,向下不兼容的 pyecharts 版本。不過如果開發(fā)者以前接觸過 pyecharts 的話,新版本對于你們來說也是會很容易上手的。新版本修復(fù) N 個 0.5.x 版本留下來的 bug。
1. 全面擁抱 Python3 和 TypeHint
pyecharts v1 停止對 Python2.7,3.4~3.5 版本的支持和維護,僅支持 Python3.6+。如果還不知道什么是 TypeHint 的同學(xué),勸你盡早入坑,官方入坑指南?typing — Support for type hints。
在編程界,早已流傳著?動態(tài)一時爽,重構(gòu)火葬場?這樣的真知灼見,動態(tài)語言類型檢查已經(jīng)成為了一種趨勢,Javascript 已經(jīng)有了 Typescript,Python 也在力推 TypeHint,雖然 Python 的 TypeHint 實際上對于程序的運行并沒有任何影響......,但它配合 IDE 和 mypy,或者 pyright 這樣的工具可以在開發(fā)階段趁早發(fā)現(xiàn)問題。
2. 棄用插件機制
pyecharts v1 廢除原有的插件機制,包括?地圖包插件?和?主題插件,插件的本質(zhì)是提供 pyecharts 運行所需要的靜態(tài)資源文件(基本都是 .js 文件),所以現(xiàn)在開放了兩種模式提供靜態(tài)資源文件。
online 模式,使用 pyecharts 官方提供的 assets host,或者部署自己的 remote host。
local 模式,使用自己本地開啟的文件服務(wù)提供 assets host(離線模式)。
棄用插件的理由
原先的 pyecharts 插件機制分散,管理/升級并沒有想象中的方便,而且分開為 jupyter/local render 兩種情況,這就導(dǎo)致了兩個要分開管理,雖然我們的 pip 包可以同時 update 這兩種情況引用的 assets,但是由于存在緩存等因素,并不能保證每次都到正確的更新。
pyecharts 不用再依賴這些包,依賴包和 pyecharts 包版本的管理也是一個容易出問題的地方。
減少維護工作,線上熱更新。
3. 更加輕量級
新本的 pyecharts 只依賴了兩個第三庫,jinja2 和 prettytable。這意味著 pyecharts 總體的體積將變小,安裝更加輕松,也可以很方便的進行離線安裝,配合上面講的 local 模式。
4. 支持原生 JavaScript
0.5.X 的版本,對原生 JavaScript 的支持還很局限,v1 版本徹底打通了任督二脈,支持傳入任意的 JavaScript 的代碼,任意的配置項回調(diào)函數(shù)。
5. 支持 JupyterLab
對 JupyterLab 的支持一直是很多開發(fā)者關(guān)心的功能,畢竟 JupyterLab 號稱是下一代的 Notebook。pyecharts v1 開始支持在 JupyterLab 中渲染圖表啦!
Jupyter Notebook
Jupyter Lab
6. 代碼風(fēng)格重構(gòu)
所有配置項均 OOP,在新版本的 pyecharts 中,一切皆 Options。配置項種類更多,可操作性更強,可以畫出更豐富的圖表,pyecharts 官方畫廊?pyecharts/pyecharts-gallery。
0.5.X 版本寫法
from pyecharts import Bar
attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
bar = Bar("柱狀圖數(shù)據(jù)堆疊示例")
bar.add("商家A", attr, v1, is_stack=True)
bar.add("商家B", attr, v2, is_stack=True)
bar.render()
v1 版本寫法,支持鏈?zhǔn)秸{(diào)用,導(dǎo)包方式也發(fā)生了變化,所以不要再問為什么舊版的代碼運行不了啦!因為兩個版本根本就完全不兼容,當(dāng)成一個新庫來學(xué)的話會好很多。
import pyecharts.options as optsfrom pyecharts.charts import Bar
attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
bar = (
Bar()
.add_xaxis(attr)
.add_yaxis("商家A", v1, stack="stack1")
.add_yaxis("商家B", v2, stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="柱狀圖數(shù)據(jù)堆疊示例"))
)
bar.render("bar_stack.html")# 當(dāng)然不習(xí)慣鏈?zhǔn)綄懛ǖ拈_發(fā)者仍舊可以使用
bar.add_xaxis(attr)
bar.add_yaxis("商家A", v1, stack="stack1")
bar.add_yaxis("商家B", v2, stack="stack1")
bar.render()
v1 版本不僅支持 Opts 配置項作為參數(shù)傳入,同時也支持原生 dict 類型,也就意味著自己可以隨意擴展 pyecharts(如果你對 Echarts 有一定了解的話),而不用修改 pyecharts 源碼。
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 等價于
bar.set_series_opts(label_opts={"show": False})
具體參考 pyecharts/options 包。
7. 支持 selenium/phantomjs 渲染圖片
非必須,如果無此需求的開發(fā)者可忽略,并不會影響正常的使用。
pyecharts v1 提供兩種模式渲染圖片,selenium 和 phantomjs,分別需要安裝?snapshot-selenium?和?snapshot-phantomjs。
from pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.render import make_snapshotdef bar_chart() -> Bar:
c = (
Bar()
.add_xaxis(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-測試渲染圖片"))
)return cdef render_chart_by_selenium():from snapshot_selenium import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar0.png")def render_chart_by_phantomjs():from snapshot_phantomjs import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar1.png")
8. 新增更多的圖表類型
新增了圖表類型和組件類型
旭日圖
百度地圖
很酷吧,你可以在 Notebook 環(huán)境中使用百度地圖,指哪打哪,媽媽再也不用擔(dān)心我地圖不夠用啦。
組件類型
9. 更加完善的文檔和示例
經(jīng)開發(fā)團隊決定,0.5.x 版本將不再進行維護,問題依舊可以提,但基本不會解決。0.5.x 版本代碼位于 05x 分支,文檔位于?https://05x-docs.pyecharts.org。v1 版本文檔位于?https://pyecharts.org。新版文檔中提供了更加豐富的示例,幫助開發(fā)者更容易入手 pyecharts。
總結(jié)
此次的重構(gòu)主要原因是我發(fā)現(xiàn) pyecharts 以前的設(shè)計實在是太糟糕了,導(dǎo)致后來版本的更新一直都是在為這糟糕設(shè)計打補丁。在某一個夜深人靜的夜晚,我下定了決心,他媽的,看不下去了,老子要重構(gòu),不要攔著我。在重構(gòu)之前,正好那段時間在寫 Golang,所以就寫了一個?go-echarts,對 Golang 開發(fā)感興趣的開發(fā)者也可以關(guān)注一下。后來覺得 go-echarts 的接口設(shè)計還不錯,所以就搬到新版的 pyecharts 中來。新接口更加清晰,語義化。
在重構(gòu)的過程中也產(chǎn)生了很多的思考,如何把接口設(shè)計得簡單易用又有可擴展性,這個其實是有矛盾的地方在的,簡單易用意味著要盡量封裝實現(xiàn)細節(jié),而可擴展性可定制性又意味著要盡量暴露底層接口,參數(shù)要靈活,但也不能直接就?*args, **kwargs,真心覺得,Python 這個傳參方式被過度使用了,很多庫為了追求方便,形參都是直接寫的?foo(*args, **kwargs),不仔細去閱讀具體實現(xiàn)邏輯你根本不知道它需要傳什么,然后傳的值是什么類型.... 我個人的觀點是,Keyword only+TypeHint 是最好的實踐,別懶,多寫幾行代碼,不然以后看起來連自己都懵。
開發(fā)和維護 pyecharts 花費了我巨大的心力,如果你覺得項目幫助到您,請認真考慮請作者喝一杯咖啡??
敲黑板
參與貢獻
期待能有更多的開發(fā)者參與到 pyecharts 的開發(fā)中來,我們會保證盡快 Reivew PR 并且及時回復(fù)。但提交 PR 請確保
通過所有單元測試,如若是新功能,請為其新增單元測試
遵守開發(fā)規(guī)范,使用 black 以及 isort 格式化代碼($ pip install -r requirements-dev.txt)
如若需要,請更新相對應(yīng)的文檔
我們也非常歡迎開發(fā)者能為 pyecharts 提供更多的示例,共同來完善文檔,文檔項目位于?pyecharts/website
感謝陪伴 pyecharts 一路走來的每個人,我相信 pyecharts 為很多的 python 開發(fā)者提供了方便的繪圖方式,我希望有提出問題的人,更希望有更多能夠一起解決問題的人,如果您真心想?yún)⑴c到開發(fā)中來,請及時聯(lián)系我,郵箱?chenjiandongx@qq.com。
點擊閱讀原文進入相關(guān)github
感謝閱讀推薦閱讀:
1:【小編心得】互聯(lián)網(wǎng)公司實習(xí)一年,我被迫知道了這些內(nèi)幕...
2:我想加入阿里,我該怎么做
3:1 行Python代碼能干哪些事,這 13個你知道嗎?
4:2018年P(guān)ython愛好者社區(qū)歷史文章合集(作者篇)
5:2018年終精心整理|Python愛好者社區(qū)歷史文章合集(類型篇)
總結(jié)
以上是生活随笔為你收集整理的pyecharts运行了但是没有图_新版pyecharts,Python可视化so easy and powerful !的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 米家大家电新春超值组合迎春上市 三款套装
- 下一篇: 2 月 8 日开播,《闪电侠》(The