陈键冬,Python中文社区专栏作者,开源项目pyecharts核心开发者。
GitHub:https://github.com/chenjiandongx

本文作者已加入Python中文社区专栏作者计划

pyecharts项目由Python中文社区专栏作者陈键冬于本社区首发,曾上榜Github Trending in Open Source,目前star数量超过5500,项目现已更新到 1.0.0版本。


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。

https://docs.python.org/3.6/library/typing.html

在编程界,早已流传着 动态一时爽,重构火葬场 这样的真知灼见,动态语言类型检查已经成为了一种趋势,Javascript 已经有了 Typescript,Python 也在力推 TypeHint,虽然 Python 的 TypeHint 实际上对于程序的运行并没有任何影响……但它配合 IDE 和 mypy,或者 pyright 这样的工具可以在开发阶段趁早发现问题。

2、弃用插件机制

pyecharts v1 废除原有的插件机制,包括 地图包插件 和 主题插件,插件的本质是提供 pyecharts 运行所需要的静态资源文件(基本都是 .js 文件),所以现在开放了两种模式提供静态资源文件。

(1)online 模式,使用 pyecharts 官方提供的 assets host,或者部署自己的 remote host。

(2)local 模式,使用自己本地开启的文件服务提供 assets host(离线模式)。

弃用插件的理由

(1)原先的 pyecharts 插件机制分散,管理/升级并没有想象中的方便,而且分开为 jupyter/local render 两种情况,这就导致了两个要分开管理,虽然我们的 pip 包可以同时 update 这两种情况引用的 assets,但是由于存在缓存等因素,并不能保证每次都到正确的更新。

(2)pyecharts 不用再依赖这些包,依赖包和 pyecharts 包版本的管理也是一个容易出问题的地方。

(3)减少维护工作,线上热更新。

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。

https://github.com/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_snapshot

def 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 c

def 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请点击下面的链接。如果您也有开源项目,请将readme或项目介绍发送到邮箱:pythonpost@163.com


pyecharts(一):Python可视化利器


pyecharts(二):Python可视化利器


3D酷炫立体图现已加入 pyecharts 豪华晚餐

                                    「在看」一下,一起PY!

独家 | pyecharts V1.0.0 版本正式发布相关推荐

  1. Kong 1.0 GA 版本正式发布,微服务 API 网关

    Kong 1.0 GA 版本已正式发布,这是一款可扩展.快速且开源的微服务 API 网关,用于管理.保护与连接混合及云原生架构.Kong 运行于全部服务之前,并可以通过插件实现各种扩展,例如身份验证. ...

  2. LAXCUS分布式操作系统6.0 RP1版本正式发布

    在Laxcus分布式操作系统6.0版本发布4个月之后,6.0 RP1版本也在近日正式发布.RP是"Release Package"的意思,6.0 RP1是Laxcus 6.0分布式 ...

  3. pyecharts V1.9.0学习笔记 柱状图和全局配置(一)

    csdn上好多代码都是0.5.x版本,所以在这里记录一下1.0.0版本后的也就是这次python3的版本. Bar 棒状图 from pyecharts.charts import Barbar = ...

  4. [ExtJS5学习笔记]第二十八节 sencha ext js 5.1.0发布版本正式发布 extjs doc下载地址

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/41911539 本文作者:sushengmiyan ------------------ ...

  5. Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

    作者 | 顾荣  南京大学PASALab, Fluid项目co-founder 来源 | 阿里巴巴云原生公众号 导读:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存 ...

  6. Fluid 0.4 新版本正式发布:支持数据预热,优化小文件场景

    作者 | 顾荣 Photo Creidt @ 轻零 导读:为了解决大数据.AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高.联合分析难.多维管理杂等痛点问题,南京大学 PASAL ...

  7. Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速

    作者 | 顾荣  南京大学 PASALab 导读:为了解决大数据.AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高.联合分析难.多维管理杂等痛点问题,南京大学 PASALab.阿 ...

  8. Fluid 0.6 版本发布:数据感知的Pod调度与数据集自动弹性扩缩容

    简介:Fluid 是 CNCF 基金会旗下云原生环境中数据密集型应用的高效支撑平台,由南京大学.阿里云云原生团队以及 Alluxio 开源社区联合发起.项目自开源发布以来吸引了众多相关方向领域专家和工 ...

  9. Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路

    简介:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存算分离 I/O 速度慢.场景感知弱调度低效等痛点问题,南京大学PASALab.阿里巴巴.Alluxio 在 20 ...

最新文章

  1. php校友录毕业论文,基于WEB的同学校友录的设计(PHP,MySQL)(附答辩记录)
  2. 裸辞后,从Android转战Web前端的学习以及求职之路
  3. android 时间管理app,时间管理app
  4. 协议地址结构_TCP/IP 协议 讲解
  5. C#中合并两个lambda表达式
  6. OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image
  7. jsf标签_JSF Facelet标签示例教程
  8. spring MongoDB 集成(分页)
  9. 拉登游戏开发--分布式计算服务机客户机程序设计
  10. 南京邮电大计算机科学与技术,计算机科学与技术专业培养目标与毕业要求-南京邮电大学计算机学院.PDF...
  11. 七日杀显示服务器ip,[七日杀怎么看玩家id]七日杀管理员怎么查玩家
  12. 学 C 语言,最经典的书有这样几本
  13. 芯动科技2023校招 FPGA岗位笔试
  14. 统计系列(二)常见的概率分布
  15. 【微机接口】可编程串行异步通信芯片8250
  16. 双剑合璧保障数据库安全
  17. MFC 右键菜单呼出
  18. Win8应用开发笔记(1):谈谈Windows RT
  19. R语言变量的处理(创建新变量 变量重新赋值
  20. 红魔6S Pro:6项重大升级铸就年度游戏旗舰

热门文章

  1. Plickers——教师拿手机、学生拿卡片,就可以完成即时全员互动!
  2. 实验3、顺序与选择结构
  3. 022减淡工具,加深工具与海绵工具
  4. 扫一扫vin码就能识别车架号的OCR技术
  5. 黑金开发板在NiosII环境下烧写image到flash失败的解决办法
  6. 中国中药保健品行业发展现状与未来拓展模式分析报告2022-2027年版
  7. Redis批量启停脚本
  8. 图形学复习-有效边表填充算法
  9. 腾讯云轻服务器yum安装报错的解决办法
  10. NGR-PEG-IR825 肿瘤新生血管靶向肽NGR-聚乙二醇-近红外荧光染料IR825