再见Pyechart,一个非常棒的 Python 统计图表库来了!

提起可视化,我们都可以想到耳熟能详的 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,或者按照如下方式添加均可!
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值