• PyEcharts 绘制图形



    转载改编自:https://www.cnblogs.com/chen8023miss/p/12220631.html


    PyEcharts 官网:https://pyecharts.org/#/


    安装

    $ pip install pyecharts
    

    1 仪表盘

    from pyecharts import charts
    
    # 仪表盘
    gauge = charts.Gauge()
    gauge.add('Python小例子', [('Python机器学习', 10), ('Python基础', 30.),
                            ('Python正则', 20)])
    gauge.render(path="./data/仪表盘.html")
    print('ok')
    

    仪表盘中共展示三项,每项的比例为10%,30%,20%,如下图默认名称显示第一项:Python机器学习,完成比例为10%

    img


    2 漏斗图

    from pyecharts import options as opts
    from pyecharts.charts import Funnel, Page
    from random import randint
    
    def funnel_base() -> Funnel:
        c = (
            Funnel()
            .add("豪车", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'],
                                             [randint(1, 20) for _ in range(7)])])
            .set_global_opts(title_opts=opts.TitleOpts(title="豪车漏斗图"))
        )
        return c
        
    funnel_base().render('./data/car_funnel.html')
    print('ok')
    

    以7种车型及某个属性值绘制的漏斗图,属性值大越靠近漏斗的大端。

    img


    3 日历图

    import datetime
    import random
    
    from pyecharts import options as opts
    from pyecharts.charts import Calendar
    
    
    def calendar_interval_1() -> Calendar:
        begin = datetime.date(2019, 1, 1)
        end = datetime.date(2019, 12, 27)
        data = [
            [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
            for i in range(0, (end - begin).days + 1, 2)  # 隔天统计
        ]
    
        calendar = (
            Calendar(init_opts=opts.InitOpts(width="1200px")).add(
                "", data, calendar_opts=opts.CalendarOpts(range_="2019"))
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Calendar-2019年步数统计"),
                visualmap_opts=opts.VisualMapOpts(
                    max_=25000,
                    min_=1000,
                    orient="horizontal",
                    is_piecewise=True,
                    pos_top="230px",
                    pos_left="100px",
                ),
            )
        )
        return calendar
    
    
    calendar_interval_1().render('./data/calendar.html')
    print('ok')
    

    绘制2019年1月1日到12月27日的步行数,官方给出的图形宽度900px不够,只能显示到9月份,本例使用opts.InitOpts(width="1200px")做出微调,并且visualmap显示所有步数,每隔一天显示一次:

    img

    img


    4 图(graph)

    import json
    import os
    
    from pyecharts import options as opts
    from pyecharts.charts import Graph, Page
    
    
    def graph_base() -> Graph:
        nodes = [
            {"name": "cus1", "symbolSize": 10},
            {"name": "cus2", "symbolSize": 30},
            {"name": "cus3", "symbolSize": 20}
        ]
        links = []
        for i in nodes:
            if i.get('name') == 'cus1':
                continue
            for j in nodes:
                if j.get('name') == 'cus1':
                    continue
                links.append({"source": i.get("name"), "target": j.get("name")})
        c = (
            Graph()
            .add("", nodes, links, repulsion=8000)
            .set_global_opts(title_opts=opts.TitleOpts(title="customer-influence"))
        )
        return c
    graph_base().render('./data/graph.html')
    print('ok')
    

    构建图,其中客户点1与其他两个客户都没有关系(link),也就是不存在有效边:

    img


    5 水球图

    from pyecharts import options as opts
    from pyecharts.charts import Liquid, Page
    from pyecharts.globals import SymbolType
    
    
    def liquid() -> Liquid:
        c = (
            Liquid()
            .add("lq", [0.67, 0.30, 0.15])
            .set_global_opts(title_opts=opts.TitleOpts(title="Liquid"))
        )
        return c
    
    
    liquid().render('./data/liquid.html')
    

    水球图的取值[0.67, 0.30, 0.15]表示下图中的三个波浪线,一般代表三个百分比:

    img


    6 饼图

    from pyecharts import options as opts
    from pyecharts.charts import Pie
    from random import randint
    
    def pie_base() -> Pie:
        c = (
            Pie()
            .add("", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'],
                                           [randint(1, 20) for _ in range(7)])])
            .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
        )
        return c
    
    pie_base().render('./data/pie_pyecharts.html')
    

    img


    7 极坐标

    import random
    from pyecharts import options as opts
    from pyecharts.charts import Page, Polar
    
    def polar_scatter0() -> Polar:
        data = [(alpha, random.randint(1, 100)) for alpha in range(101)] # r = random.randint(1, 100)
        print(data)
        c = (
            Polar()
            .add("", data, type_="bar", label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(title_opts=opts.TitleOpts(title="Polar"))
        )
        return c
    
    
    polar_scatter0().render('./data/polar.html')
    

    极坐标表示为(夹角,半径),如(6,94)表示"夹角"为6,半径94的点:

    img


    8 词云图

    from pyecharts import options as opts
    from pyecharts.charts import Page, WordCloud
    from pyecharts.globals import SymbolType
    
    
    words = [
        ("Python", 100),
        ("C++", 80),
        ("Java", 95),
        ("R", 50),
        ("JavaScript", 79),
        ("C", 65)
    ]
    
    
    def wordcloud() -> WordCloud:
        c = (
            WordCloud()
            # word_size_range: 单词字体大小范围
            .add("", words, word_size_range=[20, 100], shape='cardioid')
            .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud"))
        )
        return c
    
    
    wordcloud().render('./data/wordcloud.html')
    

    ("C",65)表示在本次统计中C语言出现65次

    img


    9 系列柱状图

    from pyecharts import options as opts
    from pyecharts.charts import Bar
    from random import randint
    
    
    def bar_series() -> Bar:
        c = (
            Bar()
            .add_xaxis(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'])
            .add_yaxis("销量", [randint(1, 20) for _ in range(7)])
            .add_yaxis("产量", [randint(1, 20) for _ in range(7)])
            .set_global_opts(title_opts=opts.TitleOpts(title="Bar的主标题", subtitle="Bar的副标题"))
        )
        return c
    
    
    bar_series().render('./data/bar_series.html')
    

    img


    10 热力图

    import random
    from pyecharts import options as opts
    from pyecharts.charts import HeatMap
    
    
    def heatmap_car() -> HeatMap:
        x = ['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉']
        y = ['中国','日本','南非','澳大利亚','阿根廷','阿尔及利亚','法国','意大利','加拿大']
        value = [[i, j, random.randint(0, 100)]
                 for i in range(len(x)) for j in range(len(y))]
        c = (
            HeatMap()
            .add_xaxis(x)
            .add_yaxis("销量", y, value)
            .set_global_opts(
                title_opts=opts.TitleOpts(title="HeatMap"),
                visualmap_opts=opts.VisualMapOpts(),
            )
        )
        return c
    
    heatmap_car().render('./data/heatmap_pyecharts.html')
    

    img


  • 相关阅读:
    C# WinForm dataGridView 技巧小结
    Win7设置局域网共享
    vs2010快捷键大全
    C# WebBrowser.DocumentCompleted 多次调用解决方法
    为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制
    VB高清图标制作方法
    sqlite 中文排序
    一个vbs文件将指定文件夹下的文件名输出到指定文件夹下
    用DOS命令获取文件列表
    文件搜索神器 Everything
  • 原文地址:https://www.cnblogs.com/fldev/p/14373213.html
Copyright © 2020-2023  润新知