精华内容
下载资源
问答
  • pyecharts 组合图

    千次阅读 2020-06-14 23:39:50
    from pyecharts.charts import Bar, Line, Grid from pyecharts import options # 1. 准备数据 cate = ["湖北", "四川", "重庆", "河北", "云南"] Confirmed_diagnosis_data = [450, 300, 232, 224, 144] death_...

    1. 上下组合
    from pyecharts.charts import Bar, Line, Grid
    from pyecharts import options
    
    # 1. 准备数据
    cate = ["湖北", "四川", "重庆", "河北", "云南"]
    Confirmed_diagnosis_data = [450, 300, 232, 224, 144]
    death_data = [50, 30, 22, 24, 44]
    
    # 2. 创建图表对象
    
    line = Line()
    line.add_xaxis(cate)
    line.add_yaxis("quezhen人数", Confirmed_diagnosis_data)
    line.add_yaxis("siwang人数", death_data)
    # legend_opts : 以容器line顶部为开始,控制line的图例位置在容器line宽度的3%处
    line.set_global_opts(title_opts=options.TitleOpts(title="线性图"),legend_opts=options.LegendOpts(pos_top="3%"))
    
    
    
    bar = Bar()
    bar.add_xaxis(cate)
    bar.add_yaxis("确诊人数", Confirmed_diagnosis_data)
    bar.add_yaxis("死亡人数", death_data)
    # pos_top : 以容器line顶部为开始,控制标题的位置在容器line宽度的50%处
    bar.set_global_opts(title_opts=options.TitleOpts(title="柱状图",pos_top='50%'),legend_opts=options.LegendOpts(pos_top="55%"))
    
    
    # 3. 创建组合类对象
    grid = Grid()
    
    # 4. 在组合对象中添加需要组合的图表对象
    grid.add(line, grid_opts=options.GridOpts(pos_bottom="60%"))
    grid.add(bar, grid_opts=options.GridOpts(pos_top="60%"))
    
    # 5. 渲染数据
    grid.render_notebook()
    
    

    在这里插入图片描述

    2. 左右组合
    from pyecharts.charts import Bar, Line, Grid
    from pyecharts import options
    
    # 1. 准备数据
    cate = ["湖北", "四川", "重庆", "河北", "云南"]
    Confirmed_diagnosis_data = [450, 300, 232, 224, 144]
    death_data = [50, 30, 22, 24, 44]
    
    # 2. 创建图表对象
    bar = Bar()
    bar.add_xaxis(cate)
    bar.add_yaxis("确诊人数", Confirmed_diagnosis_data)
    bar.add_yaxis("死亡人数", death_data)
    bar.set_global_opts(title_opts=options.TitleOpts(title="柱状图",pos_left="51%"),legend_opts=options.LegendOpts(pos_left="60%"))
    
    line = Line()
    line.add_xaxis(cate)
    line.add_yaxis("确诊人数", Confirmed_diagnosis_data)
    line.add_yaxis("死亡人数", death_data)
    # bug 这里控制不了图例的类型
    line.set_global_opts(title_opts=options.TitleOpts(title="线性图",pos_left="1%"),legend_opts=options.LegendOpts(pos_left="10%"))
    
    
    # 3. 创建组合类对象
    grid = Grid()
    
    # 4. 在组合对象中添加需要组合的图表对象
    grid.add(bar, grid_opts=options.GridOpts(pos_left="55%"))
    grid.add(line, grid_opts=options.GridOpts(pos_right="55%"))
    
    # 5. 渲染数据
    grid.render_notebook()
    

    在这里插入图片描述

    展开全文
  • Pyecharts 组合图形绘制实践

    千次阅读 2020-12-23 10:00:00
    来源:Python数据之道作者:Peter整理:LemonPyecharts 组合图形绘制实践大家好,之前跟大家分享了用 Pyecharts 绘制桑基图和饼图:炫酷!用Python制作漂...

    来源:Python数据之道

    作者:Peter

    整理:Lemon

    Pyecharts 组合图形绘制实践

    大家好,之前跟大家分享了用 Pyecharts 绘制桑基图和饼图:

    有同学提了一个问题,在 Pyecharts 中如何绘制多个图形,今天我们来分享下组合图的绘制。

    在实际的工作需求中,我们经常需要绘制多个甚至多种不同类型的图形,有时候还需要将它们放在一个页面中,达到一个可视化看板的效果。

    在本文中将利用 pyecharts 来实现这个需求,同时满足动态可视化的效果,再次感受这个可视化神器的强大之处,让你真正爱上它。

    01 环境

    • Python 3.7

    • Jupyter notebook

    • Pandas 1.1.3

    • pyecharts 1.7.1

    • pyecharts-jupyter-installer 0.0.3

    这里提醒下:

    pyecharts 的版本一定要保持一致,非常重要!

    pyecharts 的版本一定要保持一致,非常重要!

    pyecharts 的版本一定要保持一致,非常重要!

    在安装的时候可以直接指定版本号,防止出意外

    02 单个图形制作

    在下面的文章部门我们先逐个绘制多种不同的图形,这些图形的绘制不会涉及到太多的配置项,本文中的重点是如何将不同类型的图形组合在一起。这些图形包含:

    • 柱状图

    • 饼图

    • 折线图

    • 热力图

    • 漏斗图

    • 仪表盘

    导入库

    在进行绘制数据处理和绘图之前,我们还是需要先导入各种库:

    from pyecharts.globals import CurrentConfig, OnlineHostType   # 事先导入,防止不出图
    from pyecharts import options as opts  # 配置项
    from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page  # 各个图形的类
    from pyecharts.faker import Faker  # 自身数据
    from pyecharts.commons.utils import JsCode   
    from pyecharts.globals import ThemeType,SymbolType
    
    import pandas as pd
    import numpy as np
    import random
    

    模拟数据

    首先我们模拟一份简单的数据:通过下面的方式我们可以掌握如何利用pandas快速生成一个DataFrame数据

    柱状图

    柱状图的制作使用的是 Bar 方法:

    bar = (
        Bar()
        .add_xaxis(df['消费'].tolist())
        .add_yaxis("5大开支",df['数据'].tolist())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Bar-月度开支"),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )
    
    bar.render_notebook()
    

    饼图

    饼图的制作使用的是Pie:

    pie = (
        Pie()
        .add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
        .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    )
    
    pie.render_notebook()
    

    饼图视频:

    折线图

    折线图的制作使用的是 Line:

    line = (
        Line()
        .add_xaxis(df['消费'].tolist())
        .add_yaxis("月度开支", df['数据'].tolist())
        .set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
    )
    
    line.render_notebook()
    

    热力图

    热力图使用的是HeatMap()方法,在这里我们使用的是pyecharts中自带的数据:

    print(Faker.week)
    print(Faker.clock)
    
    # 0-50 的随机数+列表推导式
    
    # 两层的列表推导式
    value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
    
    heatmap = (
        HeatMap()
        .add_xaxis(Faker.clock)   # 横轴标签
        .add_yaxis("热力图", Faker.week, value)   # 传入两个列表数据
        .set_global_opts(
            title_opts=opts.TitleOpts(title="HeatMap-热力图"),
            visualmap_opts=opts.VisualMapOpts(),
        )
    )
    
    heatmap.render_notebook()
    

    热力图视频:

    漏斗图

    漏斗图在用户画像中运用的非常广,尤其是在电商领域中,从访问、浏览到最终的支付成功等一系列的操作构成一个漏斗,在这里我们模拟一份数据来绘制漏斗图,先生成一个模拟数据:

    绘图代码如下:

    funnel = (
        Funnel()
        .add("商城漏斗", [list(z) for z in zip(df1['操作'].tolist(), df1['人数'].tolist())])
        .set_global_opts(title_opts=opts.TitleOpts(title="商城用户漏斗分析"))
    )
        
    funnel.render_notebook()
    

    漏斗图视频:

    仪表盘

    在这里我们采用官方中的一个实例来制作简单的仪表盘:

    gauge = (
        Gauge()
        .add("", [("完成率", 80)])
        .set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
    )
    
    gauge.render_notebook()
    

    03 组合绘图

    在上面我们通过不同的方法绘制出了各种不同的图形,都是动态可视化的,非常精美的。下面我们通过 Page 类来将上面的多种图形来放到一个可视化看板中。

    1、首先给出整体的绘图代码

    # 1、柱状图
    def barPage() -> Bar: 
        bar = (
            Bar()
            .add_xaxis(df['消费'].tolist())
            .add_yaxis("5大开支",df['数据'].tolist())
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Bar-月度开支"),
                legend_opts=opts.LegendOpts(is_show=False),)
        )
        return bar
    
    # 2、饼图
    def piePage() -> Pie:
        pie = (
            Pie()
            .add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
            .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
        )
        return pie
    
    # 3、折线图
    def linePage() -> Line:
        line = (
            Line()
            .add_xaxis(df['消费'].tolist())
            .add_yaxis("月度开支", df['数据'].tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
        )
        return line
    
    # 4、热力图
    
    def heatmapPage() -> HeatMap:
        value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
        heatmap = (
            HeatMap()
            .add_xaxis(Faker.clock)
            .add_yaxis("热力图", Faker.week, value)
            .set_global_opts(
                title_opts=opts.TitleOpts(title="HeatMap-热力图"),
                visualmap_opts=opts.VisualMapOpts(),
            )
        )
        return heatmap
    
    # 5、漏斗图
    def funnelPage() -> Funnel:
        funnel = (
            Funnel()
            .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
            .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-漏斗图"))
        )
        return funnel
    
    
    # 6、仪表盘
    def gaugePage() -> Gauge:
        gauge = (
            Gauge()
            .add("", [("完成率", 80)])
            .set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
        )
        return gauge
    
    
    # 上面是6个图形的代码,下面利用Page进行组合
    # !!! 关键步骤
    page = (
        Page(layout=Page.DraggablePageLayout)
        .add(
            barPage(),
            piePage(),
            linePage(),
            funnelPage(),
            heatmapPage(),
            gaugePage())
    )
    
    page.render("page_demo.html")
    

    2、现在解释一下上面的代码:

    • 柱状图、饼图等不同的图形我们封装成不同的函数来实现

    • 使用Page类的add方法,添加上面的各个函数

    • 最后使用page.render()来生成一个html文件,就是我们的各个图形下一个html页面中

    现在看看生成的组合图形1的效果

    组合图形1:

    在目前生成的组合图形1中,要注意4点:

    • 左上角有个save config的按钮,接下来这个按钮大有用处

    • 整体的图形是单个上下排列的,且整体靠左,右边很多的空白

    • 每个图形都是虚线框,这表示图形可变大小,同时可以移动的

    • 整体需要上下滑动来浏览全部的图形,视觉效果不佳

    下面我们通过save config按钮来进行改动,生成一个我们自己想看到的组合图形2效果:

    组合图形2:

    当我们把图形按照我们的需求排列OK之后,此时图形仍然没有被固定下来,如果我们刷新当前页面,又会变成组合图形1的效果。

    现在点击save config按钮,保存我们的配置文件。此时会在本地当前目录下生成一个chart_config.json的配置文件。

    接下来我们利用这个配置来生成上面我们想要达到的效果图形,将图形的格式固定下来,使用下面的代码:

    Page.save_resize_html("page_demo.html",   # 上面的HTML文件名称
                          cfg_file="chart_config.json",  # 保存的json配置文件
                          dest="new_page_demo.html")  # 新HTML文件名称
    

    jupyter notebook中再运行一次,这样我们就将图形的格式固定下来了。通过这种方式我们可以设置图形的任意大小和位置,部分截图如下:

    本文结合各种图形的简单制作,最终使用 Page 将各种图形组合在一起,形成了一个可视化看板的效果,希望对大家掌握 Pyecharts 的使用有所帮助,真正在实际工作中使用到 Pyecharts 这个视化神器。

    作者简介

    Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。喜欢数据,坚持跑步,热爱阅读,乐观生活。个人格言:不浮于世,不负于己

    个人站点:www.renpeter.cn,欢迎常来小屋逛逛


    本文来自公众号读者投稿,欢迎各位童鞋向公号投稿,点击下面图片了解详情!

    ---------End---------

     公众号后台回复微信群,将邀请加入读者交流群。

    ????分享、点赞、在看,给个三连击呗!???? 

    展开全文
  • Pyecharts 组合图表 复用更新数据实现方法记录 2020-11-04 DraggablePageLayout 布局 page = Page(layout=Page.DraggablePageLayout) page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype(), grid_...

    Pyecharts 组合图表 复用更新数据实现方法记录【一定要看说明文档】
    2020-11-04

    DraggablePageLayout 布局

    page = Page(layout=Page.DraggablePageLayout)
    page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype(), grid_mutil_yaxis())
    page.render()
    

    Note: DraggablePageLayout 需要 pyecharts 版本 v.1.4.0+

    # DraggablePageLayout 利用 Jquery 以及 Echarts 本身的 resize 功能,实现了可拖拽布局。使用步骤如下
    # 1.指定 Page 布局

    page = Page(layout=Page.DraggablePageLayout)
    

    # 正常 render 图表

    page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype(), grid_mutil_yaxis())
    page.render()
    

    # 使用浏览器打开渲染后的 .html 文件,默认为 render.html。拖拉/调整图表位置和大小,当调整到一个适合
    # 的布局时,点击左上方的 Save Config 按钮,下载 chart_config.json 配置文件,假设存放位置为
    # ~/chart_config.json。再次渲染图表并指定其布局配置
    # Warning: 请注释掉上面的的所有渲染代码,就是以下三行。因为 html 已经生成,并不需要再重新渲染一遍。
    # page = Page(layout=Page.DraggablePageLayout)
    # page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype(), grid_mutil_yaxis())
    # page.render()
    # render.html:第一步生成的原 html 文件
    # chart_config.json:第二步下载的配置文件
    # my_new_charts.html:新 html 文件路径

    Page.save_resize_html("render.html", cfg_file="~/chart_config.json", dest="my_new_charts.html")
    

    # 或者可以使用 json 数据
    # cfg_dict 为 json 文件里面的内容

    Page.save_resize_html("render.html", cfg_dict=cfg_dict, dest="my_new_charts.html")
    

    # Question:能否复用渲染模板?
    # Answer: 可以的,渲染配置 json 数据中是以 chart_id 来作为一个图形的唯一标识符的,所以只需要在*
    # 第一次渲染的时候指定 chart_id 就可以啦。*
    # example:
    # bar = bar_datazoom_slider()
    # bar.chart_id = “chenjiandongx_is_an_awesome_boy”
    # line = line_markpoint()
    # line.chart_id = “chenjiandongx_is_an_amazing_boy”
    # pie = pie_rosetype()
    # pie.chart_id = “chenjiandongx_is_an_adorable_boy”
    # 然后只要以后都按这个 chart_id 来渲染图表的时候,你的布局配置就可以复用啦。
    # cat chart_config.json,会发现 chart_id 是固定的啦。

    page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype()))
    
    from pyecharts.charts import Bar, Scatter, Funnel, Liquid
    from pyecharts import options as opts
    # 内置主题类型可查看 pyecharts.globals.ThemeType
    from pyecharts.globals import ThemeType, SymbolType
    from pyecharts.charts import WordCloud
    
    # # V1 版本开始支持链式调用
    # bar = (
    #     Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK,width="600px",height="300px"))
    #     .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子", "西服", "马卦", "秋裤", "皮鞋"])
    #     .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105, 200, 100, 50, 300])
    #     .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49, 120, 80, 90, 200])
    #     .set_global_opts(title_opts=opts.TitleOpts(title="销售情况-商家销售业绩分析"))
    # )
    # # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
    # # 也可以传入路径参数,如 bar.render("mycharts.html")
    # bar.render()
    
    from pyecharts import options as opts
    from pyecharts.charts import Bar, Grid, Line
    from pyecharts.faker import Faker
    from pyecharts.charts import Pie, Gauge, Map, Page
    
    from sanic import Sanic
    from sanic.response import json, html
    from sanic import response
    
    # 初始化 Sanic
    app = Sanic(__name__)
    app.static("/", "./")
    
    def chart_base():
        bar = (
            Bar(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add_xaxis(Faker.choose())
            .add_yaxis("商家A", Faker.values())
            .add_yaxis("商家B", Faker.values())
            .set_global_opts(title_opts=opts.TitleOpts(title="数据-平台", pos_top="10px"),
                             legend_opts=opts.LegendOpts(pos_top="10", pos_left="150px"))
        )
        barA = (
            Bar(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.INFOGRAPHIC))
            .add_xaxis(Faker.choose())
            .add_yaxis("商家C", Faker.values())
            .add_yaxis("商家D", Faker.values())
            .set_global_opts(title_opts=opts.TitleOpts(title="数据-统计", pos_top="10px"),
                             legend_opts=opts.LegendOpts(pos_top="10px", pos_left="150px"))
        )
    
        line = (
            Line(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.WONDERLAND))
            .add_xaxis(Faker.choose())
            .add_yaxis("商家E", Faker.values())
            .add_yaxis("商家F", Faker.values())
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Grid-Line", pos_left="500px", pos_top="105px"),
                legend_opts=opts.LegendOpts(pos_top="110px", pos_left="600px"),
            )
        )
        lineA = (
            Line(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add_xaxis(Faker.choose())
            .add_yaxis("商家G", Faker.values())
            .add_yaxis("商家H", Faker.values())
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Grid-Line", pos_left="500px", pos_top="380px"),
                legend_opts=opts.LegendOpts(pos_top="390px", pos_left="600px"),
            )
        )
    
        lineB = (
            Line(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add_xaxis(Faker.choose(), )
            .add_yaxis("商家I", Faker.values())
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Grid-Line", pos_left="500px", pos_top="380px"),
                legend_opts=opts.LegendOpts(pos_top="390px", pos_left="600px")
            )
        )
    
        gauge = (
            Gauge(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add("", [("完成率", 96.6)], radius="100px",
                 title_label_opts=opts.LabelOpts(font_size=20, color="blue", font_family="Microsoft YaHei"),
                 )
            .set_global_opts(title_opts=opts.TitleOpts(title="完成情况"),
                             legend_opts=opts.LegendOpts(pos_left="10px", pos_top="10px")
                             )
        )
    
        gaugeA = (
            Gauge(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS, chart_id="gauageA_1"))
            .add("", [("上升率", 50.6)], radius="100px",
                 title_label_opts=opts.LabelOpts(font_size=20, color="blue", font_family="Microsoft YaHei"),
                 )
            .set_global_opts(title_opts=opts.TitleOpts(title="上升情况"),
                             legend_opts=opts.LegendOpts(pos_left="10px", pos_top="10px")
                             )
        )
    
    
        mmap = (
            Map(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china",
                 is_map_symbol_show=False,
                 )
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="全国数据分析",
                    subtitle="人口密度数据", pos_top="50px", pos_left="100px",
                ),
                visualmap_opts=opts.VisualMapOpts(
                    min_=80,
                    max_=500,
                    range_text=["High", "Low"],
                    is_calculable=True,
                ),
            )
        )
    
    
        name = [
            ("资源数据展示平台", "1"),
            ]
        wd = (
            WordCloud(init_opts=opts.InitOpts(width="600px", height="120px", theme=ThemeType.SHINE))
            .add("", name, word_size_range=(40, 40), shape=SymbolType.DIAMOND)
        )
    
        funnel = (
            Funnel(init_opts=opts.InitOpts(width="400px", height="220px", theme=ThemeType.MACARONS))
            .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
            .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例"))
        )
    
        x_data = ["展现", "点击", "访问", "咨询", "订单"]
        y_data = [100, 80, 60, 40, 20]
    
        data = [[x_data[i], y_data[i]] for i in range(len(x_data))]
    
        funnrl2 = (
            Funnel(init_opts=opts.InitOpts(width="400px", height="220px"))
            .add(
                series_name="",
                data_pair=data,
                gap=2,
                tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),
                label_opts=opts.LabelOpts(is_show=True, position="inside"),
                itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
            )
            .set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))
        )
    
        liquid = (
            Liquid(init_opts=opts.InitOpts(width="400px", height="220px"))
            .add("lq", [0.2], label_opts=opts.LabelOpts(
                    font_size=30,
                    position="inside",
                ),
                )
            .set_global_opts(title_opts=opts.TitleOpts(title="Liquid-基本示例"))
        )
    
        pie = (
            Pie(init_opts=opts.InitOpts(width="400px", height="220px"))
            .add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
            .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
            .set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
        )
    
        # grid = (
        #     Grid(init_opts=opts.InitOpts(width="1440px", height="900px", page_title="标题设置-数据分析大屏展示"
        #                                  , theme=ThemeType.WONDERLAND))
        #     # .add(bar, grid_opts=opts.GridOpts(pos_left="60px", pos_top="140px", width="300px", height="180px"))
        #     # .add(line, grid_opts=opts.GridOpts(pos_left="550px", pos_top="140px", width="400px", height="220px"))
        #     # .add(lineB, grid_opts=opts.GridOpts(pos_left="1100px", pos_top="140px", width="300px", height="180px"))
        #     # .add(barA, grid_opts=opts.GridOpts(pos_left="60px", pos_top="440px", width="300px", height="180px"))
        #     # .add(lineA, grid_opts=opts.GridOpts(pos_left="550px", pos_top="440px", width="400px", height="220px"))
        #     # .add(pie, grid_opts=opts.GridOpts(pos_left="1100px", pos_top="440px"))
        #     .add(mmap, grid_opts=opts.GridOpts(pos_left="50px", pos_top="440px", width="5500", height="500"))
        #     .render("grid_vertical.html")
        # )
    
        page = Page(layout=Page.DraggablePageLayout)
        page.add(bar, barA, line, lineA, lineB, mmap, gauge, gaugeA, wd, funnel, funnrl2, liquid, pie)
        # 生成模板
        page.render("test.html")
        # page.render("test.html")
        # 生成渲染文件
        Page.save_resize_html("test.html",
                              cfg_file="chart_config.json",
                              dest="my_test.html")
        return page
    
    
    @app.route("/")
    async def index(request):
        page = chart_base()
    
        return html(open("index.html").read())
        # return json({"hello": "world"})
    
    if __name__ == '__main__':
        # app.run(host="127.0.0.1", port=8900)
        page = chart_base()
    
    
    
    展开全文
  • 来源:Python数据之道作者:Peter整理:LemonPyecharts 组合图形绘制实践大家好,之前跟大家分享了用 Pyecharts 绘制桑基图和饼图:炫酷!用Python制作...

     来源:Python数据之道

    作者:Peter

    整理:Lemon

    Pyecharts 组合图形绘制实践

    大家好,之前跟大家分享了用 Pyecharts 绘制桑基图和饼图:

    有同学提了一个问题,在 Pyecharts 中如何绘制多个图形,今天我们来分享下组合图的绘制。

    在实际的工作需求中,我们经常需要绘制多个甚至多种不同类型的图形,有时候还需要将它们放在一个页面中,达到一个可视化看板的效果。

    在本文中将利用 pyecharts 来实现这个需求,同时满足动态可视化的效果,再次感受这个可视化神器的强大之处,让你真正爱上它。

    01 环境

    • Python 3.7

    • Jupyter notebook

    • Pandas 1.1.3

    • pyecharts 1.7.1

    • pyecharts-jupyter-installer 0.0.3

    这里提醒下:

    pyecharts 的版本一定要保持一致,非常重要!

    pyecharts 的版本一定要保持一致,非常重要!

    pyecharts 的版本一定要保持一致,非常重要!

    在安装的时候可以直接指定版本号,防止出意外

    02 单个图形制作

    在下面的文章部门我们先逐个绘制多种不同的图形,这些图形的绘制不会涉及到太多的配置项,本文中的重点是如何将不同类型的图形组合在一起。这些图形包含:

    • 柱状图

    • 饼图

    • 折线图

    • 热力图

    • 漏斗图

    • 仪表盘

    导入库

    在进行绘制数据处理和绘图之前,我们还是需要先导入各种库:

    from pyecharts.globals import CurrentConfig, OnlineHostType   # 事先导入,防止不出图
    from pyecharts import options as opts  # 配置项
    from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page  # 各个图形的类
    from pyecharts.faker import Faker  # 自身数据
    from pyecharts.commons.utils import JsCode   
    from pyecharts.globals import ThemeType,SymbolType
    
    import pandas as pd
    import numpy as np
    import random
    

    模拟数据

    首先我们模拟一份简单的数据:通过下面的方式我们可以掌握如何利用pandas快速生成一个DataFrame数据

    柱状图

    柱状图的制作使用的是 Bar 方法:

    bar = (
        Bar()
        .add_xaxis(df['消费'].tolist())
        .add_yaxis("5大开支",df['数据'].tolist())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Bar-月度开支"),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )
    
    bar.render_notebook()
    

    饼图

    饼图的制作使用的是Pie:

    pie = (
        Pie()
        .add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
        .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    )
    
    pie.render_notebook()
    

    饼图视频:

    折线图

    折线图的制作使用的是 Line:

    line = (
        Line()
        .add_xaxis(df['消费'].tolist())
        .add_yaxis("月度开支", df['数据'].tolist())
        .set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
    )
    
    line.render_notebook()
    

    热力图

    热力图使用的是HeatMap()方法,在这里我们使用的是pyecharts中自带的数据:

    print(Faker.week)
    print(Faker.clock)
    
    # 0-50 的随机数+列表推导式
    
    # 两层的列表推导式
    value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
    
    heatmap = (
        HeatMap()
        .add_xaxis(Faker.clock)   # 横轴标签
        .add_yaxis("热力图", Faker.week, value)   # 传入两个列表数据
        .set_global_opts(
            title_opts=opts.TitleOpts(title="HeatMap-热力图"),
            visualmap_opts=opts.VisualMapOpts(),
        )
    )
    
    heatmap.render_notebook()
    

    热力图视频:

    漏斗图

    漏斗图在用户画像中运用的非常广,尤其是在电商领域中,从访问、浏览到最终的支付成功等一系列的操作构成一个漏斗,在这里我们模拟一份数据来绘制漏斗图,先生成一个模拟数据:

    绘图代码如下:

    funnel = (
        Funnel()
        .add("商城漏斗", [list(z) for z in zip(df1['操作'].tolist(), df1['人数'].tolist())])
        .set_global_opts(title_opts=opts.TitleOpts(title="商城用户漏斗分析"))
    )
        
    funnel.render_notebook()
    

    漏斗图视频:

    仪表盘

    在这里我们采用官方中的一个实例来制作简单的仪表盘:

    gauge = (
        Gauge()
        .add("", [("完成率", 80)])
        .set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
    )
    
    gauge.render_notebook()
    

    03 组合绘图

    在上面我们通过不同的方法绘制出了各种不同的图形,都是动态可视化的,非常精美的。下面我们通过 Page 类来将上面的多种图形来放到一个可视化看板中。

    1、首先给出整体的绘图代码

    # 1、柱状图
    def barPage() -> Bar: 
        bar = (
            Bar()
            .add_xaxis(df['消费'].tolist())
            .add_yaxis("5大开支",df['数据'].tolist())
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Bar-月度开支"),
                legend_opts=opts.LegendOpts(is_show=False),)
        )
        return bar
    
    # 2、饼图
    def piePage() -> Pie:
        pie = (
            Pie()
            .add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
            .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
        )
        return pie
    
    # 3、折线图
    def linePage() -> Line:
        line = (
            Line()
            .add_xaxis(df['消费'].tolist())
            .add_yaxis("月度开支", df['数据'].tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
        )
        return line
    
    # 4、热力图
    
    def heatmapPage() -> HeatMap:
        value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
        heatmap = (
            HeatMap()
            .add_xaxis(Faker.clock)
            .add_yaxis("热力图", Faker.week, value)
            .set_global_opts(
                title_opts=opts.TitleOpts(title="HeatMap-热力图"),
                visualmap_opts=opts.VisualMapOpts(),
            )
        )
        return heatmap
    
    # 5、漏斗图
    def funnelPage() -> Funnel:
        funnel = (
            Funnel()
            .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
            .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-漏斗图"))
        )
        return funnel
    
    
    # 6、仪表盘
    def gaugePage() -> Gauge:
        gauge = (
            Gauge()
            .add("", [("完成率", 80)])
            .set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
        )
        return gauge
    
    
    # 上面是6个图形的代码,下面利用Page进行组合
    # !!! 关键步骤
    page = (
        Page(layout=Page.DraggablePageLayout)
        .add(
            barPage(),
            piePage(),
            linePage(),
            funnelPage(),
            heatmapPage(),
            gaugePage())
    )
    
    page.render("page_demo.html")
    

    2、现在解释一下上面的代码:

    • 柱状图、饼图等不同的图形我们封装成不同的函数来实现

    • 使用Page类的add方法,添加上面的各个函数

    • 最后使用page.render()来生成一个html文件,就是我们的各个图形下一个html页面中

    现在看看生成的组合图形1的效果

    组合图形1:

    在目前生成的组合图形1中,要注意4点:

    • 左上角有个save config的按钮,接下来这个按钮大有用处

    • 整体的图形是单个上下排列的,且整体靠左,右边很多的空白

    • 每个图形都是虚线框,这表示图形可变大小,同时可以移动的

    • 整体需要上下滑动来浏览全部的图形,视觉效果不佳

    下面我们通过save config按钮来进行改动,生成一个我们自己想看到的组合图形2效果:

    组合图形2:

    当我们把图形按照我们的需求排列OK之后,此时图形仍然没有被固定下来,如果我们刷新当前页面,又会变成组合图形1的效果。

    现在点击save config按钮,保存我们的配置文件。此时会在本地当前目录下生成一个chart_config.json的配置文件。

    接下来我们利用这个配置来生成上面我们想要达到的效果图形,将图形的格式固定下来,使用下面的代码:

    Page.save_resize_html("page_demo.html",   # 上面的HTML文件名称
                          cfg_file="chart_config.json",  # 保存的json配置文件
                          dest="new_page_demo.html")  # 新HTML文件名称
    

    jupyter notebook中再运行一次,这样我们就将图形的格式固定下来了。通过这种方式我们可以设置图形的任意大小和位置,部分截图如下:

    本文结合各种图形的简单制作,最终使用 Page 将各种图形组合在一起,形成了一个可视化看板的效果,希望对大家掌握 Pyecharts 的使用有所帮助,真正在实际工作中使用到 Pyecharts 这个视化神器。

    作者简介

    Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。喜欢数据,坚持跑步,热爱阅读,乐观生活。个人格言:不浮于世,不负于己

    个人站点:www.renpeter.cn,欢迎常来小屋逛逛

    
    往期精彩回顾
    
    
    
    适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
    AI基础下载机器学习的数学基础专辑
    获取本站知识星球优惠券,复制链接直接打开:
    https://t.zsxq.com/qFiUFMV
    本站qq群704220115。
    
    加入微信群请扫码:
    
    
    展开全文
  • PyechartsDataVisualiztionForBili:一个DJango应用程序,使用来自BiliBili的爬网数据将Pyecharts组合在一起
  • 1、折线: 某星期的周一到周日最高气温 [11, 11, 15, 13, 12, 13, 10] 最低气温 [1, -2, 2, 5, 3, 2, 0] 2、动态散点: x轴数据 [5, 20, 36, 10, 75, 90] y轴数据[10, 25, 8, 60, 20, 80] 3、柱形: 一商店...
  • 1.下载安装pyecharts cmd输入 pip install pyecharts 如果是用的pycharm可以直接在Terminal中输入 (如果上述命令没有效果的话,可用下面的命令) 2、学习pyecharts Echarts 是一个由百度开源的数据可视化,凭借着...
  • pyecharts-page的组合

    2020-11-28 22:37:35
    from pyecharts.charts import Map,Bar,Page,Pie from pyecharts import options as opts from pyecharts.components import Table from pyecharts.options import ComponentTitleOpts url = 'h

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,031
精华内容 412
关键字:

pyecharts组合图