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