
作者:朱小五
来源:快学Python
👆人生苦短,快学Python!
最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介绍,并且只有一个简陋的官方示例。
经过小五一番测试成功复现了其中一个示例图片,还很精致。今天正好把完整过程分享给大家,看看这个新库绘图也可以这么漂亮!
Python可视化新秀
这个Python可视化新秀,在GitHub上是这样介绍的:
🎨 PyG2Plot 是
@AntV/G2Plot在 Python3 上的封装。G2Plot 是一套简单、易用、并具备一定扩展能力和组合能力的统计图表库,基于图形语法理论搭建而成。
不过研究PyG2Plot还得先从G2开始讲,它是蚂蚁金服开源一个基于图形语法,面向数据分析的统计图表引擎。后来又在其基础上,封装出业务上常用的统计图表库——G2Plot。

不过现在Python这么热,几乎每一个nb的前端可视化库,最终都会被用python开发一套生成相应html的库!它也不例外,封装出了Python可视化库——PyG2Plot。
在GitHub上,也提供了一张示例图,我对右下角的散点图比较感兴趣。

结果兴致勃勃地去看示例,这简直买家秀与卖家秀啊!

我不管,我就要右边那个👉
自己动手,丰衣足食
看来还是需要自己动手,那就先安装PyG2Plot库吧
1pip install pyg2plot 2
目前目前 pyg2plot 只提供简单的一个 API,只列出需要的参数
- Plot
-
Plot(plot_type: str): 获取
Plot对应的类实例。 -
plot.set_options(options: object): 给图表实例设置一个 G2Plot 图形的配置。
-
plot.render(path, env, **kwargs): 渲染出一个 HTML 文件,同时可以传入文件的路径,以及 jinja2 env 和 kwargs 参数。
-
plot.render_notebook(env, **kwargs): 将图形渲染到 jupyter 的预览。
于是我们可以先导入Plot方法
1from pyg2plot import Plot 2
我们要画散点图
1scatter = Plot("Scatter") 2
下一步就是要获取数据和设置参数plot.set_options(),这里获取数据直接利用requset解析案例json,而参数让我在后面一一道来:
1import requests 2 3#请求地址 4url = "https://gw.alipayobjects.com/os/bmw-prod/0b37279d-1674-42b4-b285-29683747ad9a.json" 5 6#发送get请求 7a = requests.get(url) 8 9#获取返回的json数据,并赋值给data 10data = a.json() 11

成功获取解析好的对象集合数据。
下面是对着参数,一顿操作猛如虎:
1scatter.set_options( 2{ 3 'appendPadding': 30, 4 'data': data, 5 'xField': 'change in female rate', 6 'yField': 'change in male rate', 7 'sizeField': 'pop', 8 'colorField': 'continent', 9 'color': ['#ffd500', '#82cab2', '#193442', '#d18768','#7e827a'], 10 'size': [4, 30], 11 'shape': 'circle', 12 'pointStyle':{'fillOpacity': 0.8,'stroke': '#bbb'}, 13 'xAxis':{'line':{'style':{'stroke': '#aaa'}},}, 14 'yAxis':{'line':{'style':{'stroke': '#aaa'}},}, 15 'quadrant':{ 16 'xBaseline': 0, 17 'yBaseline': 0, 18 'labels': [ 19 {'content': 'Male decrease,\nfemale increase'}, 20 {'content': 'Female decrease,\nmale increase'}, 21 {'content': 'Female & male decrease'}, 22 {'content': 'Female &\n male increase'}, ],}, 23}) 24
如果在Jupyter notebook中预览的话,则执行下方语句
1scatter.render_notebook() 2
如果想渲染出完整的html的话,则执行下方语句
1scatter.render("散点图.html") 2
看一下成果吧

参数解析&完整代码
各位看官,这块可能比较无聊,可以直接划到文末或者点击收藏。
主要还是详解一下刚才scatter.set_options()里的参数,方便大家后续自己改造!
分成几个部分一点一点解释:
参数解释 一
1'appendPadding': 30, #① 2'data': data, #② 3'xField': 'change in female rate', #③ 4'yField': 'change in male rate',
① 图表在上右下左的间距,加不加这个参数具体看下图

② 设置图表数据源(其中data在前面已经赋值了),这里的数据源为对象集合,例如:[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]。
③ xField和yField这两个参数分别是横/纵向的坐标轴对应的字段。
参数解释 二
1'sizeField': 'pop', #④ 2'colorField': 'continent', #⑤ 3'color': ['#ffd500', '#82cab2', '#193442', '#d18768','#7e827a'], #⑥ 4'size': [4, 30], #⑦ 5'shape': 'circle', #⑧ 6
④ 指定散点大小对应的字段名,我们用的pop(人口)字段。
⑤ 指定散点颜色对应的字段名,我们用的continent(洲)字段。

⑥ 设置散点的颜色,指定了系列色值。
⑦ 设置散点的大小,可以指定大小数组 [minSize, maxSize]
⑧ 设置点的形状,比如cicle、square
参数解释 三
1'pointStyle':{'fillOpacity': 0.8,'stroke': '#bbb'}, #⑨ 2'xAxis':{'line':{'style':{'stroke': '#aaa'}},}, #⑩ 3'yAxis':{'line':{'style':{'stroke': '#aaa'}},}, 4
⑨ pointStyle是指折线样式,不过在散点图里,指的是散点的描边。另外fillOpacity是设置透明度,stroke是设置描边颜色。

⑩ 这里只是设置了坐标轴线的颜色。
参数解释 四
1'quadrant':{ 2 'xBaseline': 0, 3 'yBaseline': 0, 4 'labels': [ 5 {'content': 'Male decrease,\nfemale increase'}, 6 {'content': 'Female decrease,\nmale increase'}, 7 {'content': 'Female & male decrease'}, 8 {'content': 'Female &\n male increase'}, ],}, 9
quadrant是四象限组件,具体细分配置如下:
| 细分配置 | 功能描述 |
|---|---|
| xBaseline | x 方向上的象限分割基准线,默认为 0 |
| yBaseline | y 方向上的象限分割基准线,默认为 0 |
| labels | 象限文本配置 |
PyG2Plot的介绍文档还不完善,上文中的很多参数是摸索的,大家作为参考就好。

PyG2Plot 原理其实非常简单,其中借鉴了 pyecharts 的实现,但是因为蚂蚁金服的 G2Plot 完全基于可视分析理论的配置式结构,所以封装上比 pyecharts 简洁非常非常多。
完整代码
如果有小伙伴对本文代码感兴趣,扫码👇关注「快学Python」后台回复“PyG2Plot” ,建议直接复制,即可获取全部代码!
本文转转自微信公众号凹凸数据原创[https://mp.weixin.qq.com/s/0vE4i0QyzYhV-bcagyHVEw(https://mp.weixin.qq.com/s/0vE4i0QyzYhV-bcagyHVEw),可扫描二维码进行关注:
如有侵权,请联系删除。