[开源] Python 上的可视化库PyG2Plot - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
50vip
V2EX    分享创造

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

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

    先说重点,欢迎给个 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 数据问题不大。主要还是做好按需渲染就行!
    jr55475f112iz2tu
        10
    jr55475f112iz2tu  
       2021-01-21 14:05:09 +08:00
    想了解一下,最后的附图是默认输出的样式,还是也是调整后的样子?
    bojue
        11
    bojue  
       2021-01-21 14:09:41 +08:00
    @0vip #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     Solana     5286 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:54 PVG 14:54 LAX 22:54 JFK 01:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86