V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
50vip
V2EX  ›  分享创造

[开源] Python 上的可视化库——PyG2Plot

  •  2
     
  •   50vip · 2021-01-21 09:22:01 +08:00 · 3287 次点击
    这是一个创建于 1431 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说重点,欢迎给个 Star 🙇‍♂️


    G2Plot 是一个基于配置、体验优雅、面向数据分析的统计图表库,帮助开发者以最小成本绘制高质量统计图表。

    那么对于很多 Python 语言环境的同学,如何使用 G2Plot 在进行数据分析之后的可视化呢?也就是 如何将 G2Plot 和 Python 结合起来?**这里给出的就是基于 G2Plot 封装出 **PyG2Plot,欢迎帮我充一下 Star 。 **

    如何使用

    $ pip install pyg2plot
    

    主要有 2 种使用方式(能力扩充中,欢迎提 issue )

    1. 渲染出完整的 HTML

    from pyg2plot import Plot
    
    line = Plot("Line")
    
    line.set_options({
      "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 },
      ],
      "xField": "year",
      "yField": "value",
    })
    
    # 1. render html file named plot.html
    line.render("plot.html")
    
    # 2. render html string
    line.render_html()
    

    这种情况可以用于:

    • 服务端 html 直出的场景
    • 生成可交互可视化分享
    • Excel 等工具嵌入的场景

    2. 在 Jupyter notebook 中预览

    from pyg2plot import Plot
    
    line = Plot("Line")
    
    line.set_options({
      "height": 400, # set a default height in jupyter preview
      "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 },
      ],
      "xField": "year",
      "yField": "value",
    })
    
    line.render_notebook()
    

    在我们做数据分析教程的过程中,可以将我们的数据使用 PyG2Plot 进行可视化并预览出来,十分方便! image.png

    开发原理

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

    基本的原理,就是通过 Python 语法提供 API,然后再调用 render 的时候,生成最终的 G2Plot HTML 文本,而针对不同的环境,生成的 HTML 稍有区别。

    所以核心文件是:

    • plot.py: 提供了 PyG2Plot 的几乎全部 API
    • engine.py:提供了渲染 HTML 的能力,其实是基于 jinjia2 这个模板引擎实现的,基本内容很少
    • templates:提供了所有的 jinjia2 模板文件,对于模板怎么用,jinjia2 的文档是非常非常详细的

    使用文档

    PyG2Plot 提供的 API 非常简单,使用上:

    # 1. import
    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 的配置文档,支持所有的图表、功能、特性,概念和结构上不作任何修改。 image.png

    最后

    最后有任何的特性支持和 bug 反馈,欢迎 issue 或者 PR 。

    15 条回复    2021-01-25 10:04:43 +08:00
    shyrock
        1
    shyrock  
       2021-01-21 09:55:02 +08:00
    G2Plot 完全基于可视分析理论的配置式结构,所以封装上比 pyecharts 简洁非常非常多。

    lz 说的可视分析理论不知道有没有资料可以学习一下。说实话我觉得现在的可视化库要么简单但是表现力差,要么表现力好但是配置太复杂。
    50vip
        2
    50vip  
    OP
       2021-01-21 10:19:16 +08:00
    @shyrock 要不要来一个 BI 产品学习一下数据可视分析。
    more1sec
        3
    more1sec  
       2021-01-21 12:41:15 +08:00
    跟 matplotlib 比优势在哪
    yanghui1228
        4
    yanghui1228  
       2021-01-21 13:13:04 +08:00 via Android
    @more1sec matplotlib 好像不能直接输出 html
    yinheli
        5
    yinheli  
       2021-01-21 13:17:06 +08:00
    fix typo jinjia2 -> jinja2 😂
    50vip
        6
    50vip  
    OP
       2021-01-21 13:24:28 +08:00
    @yinheli 已经改不了了,囧~
    50vip
        7
    50vip  
    OP
       2021-01-21 13:25:41 +08:00
    @more1sec matplotlib 肯定是很牛的,但是 PyG2Plot 是 G2Plot 的封装,是另一个选择吧,另外一个同学也指出了和 matplotlib 不一样的地方
    bojue
        8
    bojue  
       2021-01-21 13:42:45 +08:00
    @shyrock 感觉现在的可视化库"表现力好的配置复杂,简答的表现力差",这个应该能理解吧,毕竟丰富的表现力需要丰富的数据参数,我之前看到一个需求:目前的可视化图表满足大部分应用,但是大量 [50w+] 数据的表现力不够,不管是性能还是展示的维度
    50vip
        9
    50vip  
    OP
       2021-01-21 13:57:11 +08:00
    @bojue 我们内部做了大数据的多维分析组件,类似 tableau,50w 数据问题不大。主要还是做好按需渲染就行!
    czfy
        10
    czfy  
       2021-01-21 14:05:09 +08:00
    想了解一下,最后的附图是默认输出的样式,还是也是调整后的样子?
    bojue
        11
    bojue  
       2021-01-21 14:09:41 +08:00
    @50vip #9 我之前看了做数据分析的需求,什么数仓,多维度分析也不是很懂,说目前的 echats 无法解决这些问题,tableau 知道但是没过多了解,应该是根据自己选择不同的分析维度,tableau 可以分析并显示合适的结果图表。这个特性可以解决配置复杂的问题,和展示维度不充分的问题。


    我记得 50w+的数据,是在 G6Plot 有人做过{ 55000 节点数量 }测试,我最近刚好看到 :

    https://g6.antv.vision/zh/examples/performance/perf#moreData
    50vip
        12
    50vip  
    OP
       2021-01-21 15:01:12 +08:00
    echarts G2 G2Plot 是一个维度的东西,是做数据可视化的 ui 的,而 tableau 是数据分析产品,前者只是后者的很小的一个技术维度。

    @bojue
    marcolin
        13
    marcolin  
       2021-01-21 15:03:21 +08:00
    可以试试 altair,通过 vega 也可以输出到 html
    bojue
        14
    bojue  
       2021-01-24 19:05:02 +08:00
    @50vip tableau 虽然是数据分析的,但是就交互方式来讲挺友好(傻瓜式)的,就想现在服务端有一个数据包,作为运营或者会计他们是不懂代码的,在完全不会使用 echart 的情况下,可以通过选择关注的指标获取数据包通过数据分析生成的图表类报表->自定义的 chats 图,不知道这个算智慧图表还是数据分析,在智慧城市类大屏项目类有团队在做,具体只能意会没设计过也说不清楚
    50vip
        15
    50vip  
    OP
       2021-01-25 10:04:43 +08:00
    @bojue tableau powerbi 等属于数据可视分析的产品( BI 产品)国内也有 fineBI 等这类。而 G2Plot 、Echarts 只是这些产品在可视化上的前端可视化技术方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2671 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:15 · PVG 23:15 · LAX 07:15 · JFK 10:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.