提起可视化,我们都可以想到耳熟能详的 Python 包:Matplotlib、Bokeh、pyechart等等,但是对于很多同学来说,这些绘制可视化图太复杂了。
今天我来给大家分享一款简单、易用、并具备一定扩展能力和组合能力的统计图表库PyG2Plot,它是基于图形语法理论搭建而成,帮助开发者以最小成本绘制高质量统计图表。
安装方法非常简单
pip install pyg2plot
常用绘制图形比较多,在文中我列举常用的几种,如果你有更多兴趣研究,我已在文末给出更多详细资料。
1、折线图
from pyg2plot import Plot
data = [
{ "year": '1991', "value": 3 },
{ "year": '1992', "value": 4 },
{ "year": '1993', "value": 3.5 },
{ "year": '1994', "value": 5 },
{ "year": '1995', "value": 4.9 },
{ "year": '1996', "value": 6 },
{ "year": '1997', "value": 7 },
{ "year": '1998', "value": 9 },
{ "year": '1999', "value": 13 },
]
line = Plot("Line")
line.set_options({
"appendPadding": 32,
"data": data,
"xField": "year",
"yField": "value",
"label": {},
"smooth": True,
"lineStyle": {
"lineWidth": 3,
},
"point": {
"size": 5,
"shape": 'diamond',
"style": {
"fill": "white",
"stroke": "#5B8FF9",
"lineWidth": 2,
}
}
})
line.render("line.html")
2、柱形图
from pyg2plot import Plot
data = [
{ "city": "石家庄", "type": "水果", "value": 14500 },
{ "city": "石家庄", "type": "米面", "value": 8500 },
{ "city": "石家庄", "type": "特产零食", "value": 10000 },
{ "city": "石家庄", "type": "茶叶", "value": 7000 },
{ "city": "深圳", "type": "水果", "value": 9000 },
{ "city": "深圳", "type": "米面", "value": 8500 },
{ "city": "深圳", "type": "特产零食", "value": 11000 },
{ "city": "深圳", "type": "茶叶", "value": 6000 },
{ "city": "温州", "type": "水果", "value": 16000 },
{ "city": "温州", "type": "米面", "value": 5000 },
{ "city": "温州", "type": "特产零食", "value": 6000 },
{ "city": "温州", "type": "茶叶", "value": 10000 },
{ "city": "宁波", "type": "水果", "value": 14000 },
{ "city": "宁波", "type": "米面", "value": 9000 },
{ "city": "宁波", "type": "特产零食", "value": 10000 },
{ "city": "宁波", "type": "茶叶", "value": 9000 },
{ "city": "无锡", "type": "水果", "value": 14000 },
{ "city": "无锡", "type": "米面", "value": 9000 },
{ "city": "无锡", "type": "特产零食", "value": 10000 },
{ "city": "无锡", "type": "茶叶", "value": 6000 },
{ "city": "杭州", "type": "水果", "value": 9000 },
{ "city": "杭州", "type": "米面", "value": 8500 },
{ "city": "杭州", "type": "特产零食", "value": 10000 },
{ "city": "杭州", "type": "茶叶", "value": 6000 },
{ "city": "北京", "type": "水果", "value": 17000 },
{ "city": "北京", "type": "米面", "value": 6000 },
{ "city": "北京", "type": "特产零食", "value": 7000 },
{ "city": "北京", "type": "茶叶", "value": 10000 },
{ "city": "上海", "type": "水果", "value": 18000 },
{ "city": "上海", "type": "米面", "value": 11000 },
{ "city": "上海", "type": "特产零食", "value": 15000 },
{ "city": "上海", "type": "茶叶", "value": 14000 }
]
column = Plot('Column')
column.set_options({
"appendPadding": 32,
"data": data,
"xField": "city",
"yField": "value",
"seriesField": "type",
"isGroup": True,
"columnStyle": {
"radius": [20, 20, 0, 0],
},
"legend": {
"position": "top"
}
})
column.render('column.html')
3、散点图
from pyg2plot import Plot
data = [
{ "x": 42, "y": 38, "size": 20, "genre": "female" },
{ "x": 6, "y": 18, "size": 1, "genre": "female" },
{ "x": 1, "y": 93, "size": 55, "genre": "female" },
{ "x": 57, "y": 2, "size": 90, "genre": "female" },
{ "x": 80, "y": 76, "size": 22, "genre": "female" },
{ "x": 11, "y": 74, "size": 96, "genre": "female" },
{ "x": 88, "y": 56, "size": 10, "genre": "female" },
{ "x": 30, "y": 47, "size": 49, "genre": "female" },
{ "x": 57, "y": 62, "size": 98, "genre": "female" },
{ "x": 4, "y": 16, "size": 16, "genre": "female" },
{ "x": 46, "y": 10, "size": 11, "genre": "female" },
{ "x": 22, "y": 87, "size": 89, "genre": "female" },
{ "x": 57, "y": 91, "size": 82, "genre": "female" },
{ "x": 45, "y": 15, "size": 98, "genre": "female" },
{ "x": 9, "y": 81, "size": 63, "genre": "male" },
{ "x": 98, "y": 5, "size": 89, "genre": "male" },
{ "x": 51, "y": 50, "size": 73, "genre": "male" },
{ "x": 41, "y": 22, "size": 14, "genre": "male" },
{ "x": 58, "y": 24, "size": 20, "genre": "male" },
{ "x": 78, "y": 37, "size": 34, "genre": "male" },
{ "x": 55, "y": 56, "size": 53, "genre": "male" },
{ "x": 18, "y": 45, "size": 70, "genre": "male" },
{ "x": 42, "y": 44, "size": 28, "genre": "male" },
{ "x": 3, "y": 52, "size": 59, "genre": "male" },
{ "x": 31, "y": 18, "size": 97, "genre": "male" },
{ "x": 79, "y": 91, "size": 63, "genre": "male" },
{ "x": 93, "y": 23, "size": 23, "genre": "male" },
{ "x": 44, "y": 83, "size": 22, "genre": "male" }
]
scatter = Plot("Scatter")
scatter.set_options({
"appendPadding": 32,
"data": data,
"xField": "x",
"yField": "y",
"colorField": "genre",
"color": [
"r(0.4, 0.3, 0.7) 0:rgba(255,255,255,0.5) 1:#5B8FF9",
"r(0.4, 0.4, 0.7) 0:rgba(255,255,255,0.5) 1:#61DDAA",
],
"sizeField": "size",
"size": [5, 20],
"shape": "circle",
"yAxis": {
"nice": True,
"line": {
"style": {
"stroke": "#eee",
},
},
},
"xAxis": {
"grid": {
"line": {
"style": {
"stroke": "#eee",
},
},
},
"line": {
"style": {
"stroke": "#eee",
},
},
},
})
scatter.render("scatter.html")
输出方式提供两种
line.render("plot.html")
line.render_notebook()
开发原理
PyG2Plot 原理其实非常简单,其中借鉴了 pyecharts 的实现,但是因为 G2Plot 完全基于可视分析理论的配置式结构,所以封装上比 pyecharts 简洁非常非常多。
基本的原理,就是通过 Python 语法提供 API,然后再调用 render 的时候,生成最终的 G2Plot HTML 文本,而针对不同的环境,生成的 HTML 稍有区别。
所以核心文件是:
- plot.py:提供了 PyG2Plot 的几乎全部 API
- engine.py:提供了渲染 HTML 的能力,其实是基于 jinjia2 这个模板引擎实现的,基本内容很少
- templates:提供了所有的 jinjia2 模板文件,对于模板怎么用,jinjia2 的文档是非常非常详细的
使用文档
PyG2Plot 提供的 API 非常简单,使用上:
from pyg2plot import Plot
# 2. use a plot
line = Plot("Line")
# 3. set_options use G2Plot
line.set_options({ data, ... })
# 4. render
line.render_notebook()
而这其中 set_options API 的参数,是完全沿用 G2Plot 的配置文档,支持所有的图表、功能、特性,概念和结构上不作任何修改。
领取方式:
长按下方扫码,关注后发消息:PyG2Plot
技术交流
欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!
为方便进行学习交流,本号开通了技术交流群,添加方式如下:
直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!