原来Python绘图也可以这么漂亮,这次真的是学习到了!

Aidan075
• 阅读 1792

原来Python绘图也可以这么漂亮,这次真的是学习到了!

作者:朱小五

来源:快学Python

👆人生苦短,快学Python!

最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介绍,并且只有一个简陋的官方示例。

经过小五一番测试成功复现了其中一个示例图片,还很精致。今天正好把完整过程分享给大家,看看这个新库绘图也可以这么漂亮!

Python可视化新秀

这个Python可视化新秀,在GitHub上是这样介绍的:

🎨 PyG2Plot 是@AntV/G2Plot 在 Python3 上的封装。G2Plot 是一套简单、易用、并具备一定扩展能力和组合能力的统计图表库,基于图形语法理论搭建而成。

不过研究PyG2Plot还得先从G2开始讲,它是蚂蚁金服开源一个基于图形语法,面向数据分析的统计图表引擎。后来又在其基础上,封装出业务上常用的统计图表库——G2Plot

原来Python绘图也可以这么漂亮,这次真的是学习到了!

不过现在Python这么热,几乎每一个nb的前端可视化库,最终都会被用python开发一套生成相应html的库!它也不例外,封装出了Python可视化库——PyG2Plot

在GitHub上,也提供了一张示例图,我对右下角的散点图比较感兴趣。

原来Python绘图也可以这么漂亮,这次真的是学习到了!

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

原来Python绘图也可以这么漂亮,这次真的是学习到了!

我不管,我就要右边那个👉

自己动手,丰衣足食

看来还是需要自己动手,那就先安装PyG2Plot库吧

pip install pyg2plot  

目前目前 pyg2plot 只提供简单的一个 API,只列出需要的参数

  • Plot
  1. Plot(plot_type: str): 获取 Plot 对应的类实例。

  2. plot.set_options(options: object): 给图表实例设置一个 G2Plot 图形的配置。

  3. plot.render(path, env, **kwargs): 渲染出一个 HTML 文件,同时可以传入文件的路径,以及 jinja2 env 和 kwargs 参数。

  4. plot.render_notebook(env, **kwargs): 将图形渲染到 jupyter 的预览。

于是我们可以先导入Plot方法

from pyg2plot import Plot  

我们要画散点图

scatter = Plot("Scatter")  

下一步就是要获取数据和设置参数plot.set_options(),这里获取数据直接利用requset解析案例json,而参数让我在后面一一道来:

import requests  

#请求地址  
url = "https://gw.alipayobjects.com/os/bmw-prod/0b37279d-1674-42b4-b285-29683747ad9a.json"  

#发送get请求  
a = requests.get(url)  

#获取返回的json数据,并赋值给data  
data = a.json()  

原来Python绘图也可以这么漂亮,这次真的是学习到了!

成功获取解析好的对象集合数据。

下面是对着参数,一顿操作猛如虎:

scatter.set_options(  
{  
    'appendPadding': 30,  
    'data': data,  
    'xField': 'change in female rate',  
    'yField': 'change in male rate',  
    'sizeField': 'pop',  
    'colorField': 'continent',  
    'color': ['#ffd500', '#82cab2', '#193442', '#d18768','#7e827a'],  
    'size': [4, 30],  
    'shape': 'circle',  
    'pointStyle':{'fillOpacity': 0.8,'stroke': '#bbb'},  
    'xAxis':{'line':{'style':{'stroke': '#aaa'}},},  
    'yAxis':{'line':{'style':{'stroke': '#aaa'}},},  
    'quadrant':{  
        'xBaseline': 0,  
        'yBaseline': 0,  
        'labels': [  
        {'content': 'Male decrease,\nfemale increase'},  
        {'content': 'Female decrease,\nmale increase'},  
        {'content': 'Female & male decrease'},  
        {'content': 'Female &\n male increase'}, ],},  
})  

如果在Jupyter notebook中预览的话,则执行下方语句

scatter.render_notebook()  

如果想渲染出完整的html的话,则执行下方语句

scatter.render("散点图.html")  

看一下成果吧

原来Python绘图也可以这么漂亮,这次真的是学习到了!

参数解析&完整代码

各位看官,这块可能比较无聊,可以直接划到文末或者点击收藏。

主要还是详解一下刚才scatter.set_options()里的参数,方便大家后续自己改造!

分成几个部分一点一点解释:

参数解释 一

'appendPadding': 30, #①  
'data': data, #②  
'xField': 'change in female rate', #③  
'yField': 'change in male rate', 

① 图表在上右下左的间距,加不加这个参数具体看下图

原来Python绘图也可以这么漂亮,这次真的是学习到了!

② 设置图表数据源(其中data在前面已经赋值了),这里的数据源为对象集合,例如:[{ time: '1991',value: 20 }, { time: '1992',value: 20 }]。

xFieldyField这两个参数分别是横/纵向的坐标轴对应的字段。

参数解释 二

'sizeField': 'pop', #④  
'colorField': 'continent', #⑤  
'color': ['#ffd500', '#82cab2', '#193442', '#d18768','#7e827a'], #⑥  
'size': [4, 30], #⑦  
'shape': 'circle', #⑧  

④ 指定散点大小对应的字段名,我们用的pop(人口)字段。

⑤ 指定散点颜色对应的字段名,我们用的continent(洲)字段。

原来Python绘图也可以这么漂亮,这次真的是学习到了!

⑥ 设置散点的颜色,指定了系列色值。

⑦ 设置散点的大小,可以指定大小数组 [minSize, maxSize]

⑧ 设置点的形状,比如ciclesquare

参数解释 三

'pointStyle':{'fillOpacity': 0.8,'stroke': '#bbb'}, #⑨  
'xAxis':{'line':{'style':{'stroke': '#aaa'}},}, #⑩  
'yAxis':{'line':{'style':{'stroke': '#aaa'}},},  

pointStyle是指折线样式,不过在散点图里,指的是散点的描边。另外fillOpacity是设置透明度,stroke是设置描边颜色。

原来Python绘图也可以这么漂亮,这次真的是学习到了!

⑩ 这里只是设置了坐标轴线的颜色。

参数解释 四

'quadrant':{  
    'xBaseline': 0,  
    'yBaseline': 0,  
    'labels': [  
    {'content': 'Male decrease,\nfemale increase'},  
    {'content': 'Female decrease,\nmale increase'},  
    {'content': 'Female & male decrease'},  
    {'content': 'Female &\n male increase'}, ],},  

quadrant是四象限组件,具体细分配置如下:

细分配置 功能描述
xBaseline x 方向上的象限分割基准线,默认为 0
yBaseline y 方向上的象限分割基准线,默认为 0
labels 象限文本配置

PyG2Plot的介绍文档还不完善,上文中的很多参数是摸索的,大家作为参考就好。

原来Python绘图也可以这么漂亮,这次真的是学习到了!

PyG2Plot 原理其实非常简单,其中借鉴了 pyecharts 的实现,但是因为蚂蚁金服的 G2Plot 完全基于可视分析理论的配置式结构,所以封装上比 pyecharts 简洁非常非常多。

完整代码

如果有小伙伴对本文代码感兴趣,扫码👇关注「快学Python」后台回复“PyG2Plot” ,建议直接复制,即可获取全部代码!

本文转转自微信公众号凹凸数据原创[https://mp.weixin.qq.com/s/0vE4i0QyzYhV-bcagyHVEw(https://mp.weixin.qq.com/s/0vE4i0QyzYhV-bcagyHVEw),可扫描二维码进行关注: 原来Python绘图也可以这么漂亮,这次真的是学习到了! 如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这