pyecharts可视化

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: pyecharts画图包是python里非常好用的可视化包。其也可以通过json配置画图组合,做一个可视化大屏界面。最后可以制作如下可视化图表,掌握其制作方法其他更多组合可以自行配置。

pyecharts画图包是python里非常好用的可视化包。其也可以通过json配置画图组合,做一个可视化大屏界面。最后可以制作如下可视化图表,掌握其制作方法其他更多组合可以自行配置。其制作步骤如下:

配置好各类图表

我这里背景统一选为PURPLE_PASSION(其接近黑色,比较适合做画布背景) 画迁徙图/运输图 我一次性导入了所有需要用到的画图子包,后面不需要再多次导入。

#迁徙图
from pyecharts.charts import  Liquid,Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page,Geo,WordCloud # 各个图形的类
from pyecharts.globals import ChartType,SymbolType,ThemeType
from pyecharts import options as opts
city_num=[('广州',105),('北京',70),('成都',99),('西安',80),('武汉',80),('上海',80)]
start_end=[('广州','北京'),('广州','成都'),('广州','西安'),('广州','武汉'),('广州','上海')]
(
    Geo(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION)) # 图表大小,画布背景颜色
    .add_schema(maptype='china',
               itemstyle_opts=opts.ItemStyleOpts(color='#28527a',border_color='#9ba4b4'))#图背景颜色
    .add('',data_pair=city_num,color='black')
    .add('',data_pair=start_end,type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,color='blue',symbol_size=5),
         linestyle_opts=opts.LineStyleOpts(curve=0.3))
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))#不显示标签
    .set_global_opts(title_opts=opts.TitleOpts(title="迁徙图",pos_left='50%'))    # 图表标题
 ).render_notebook()

其输出图是个动态迁徙图,截图只能看静态图片如下:同样调试好其他类别的图,都用代码实现并配置好相应的背景、参数等。我这里一共配置了柱状图、折线图、迁徙图、水球图、词云图、饼图、进度控制图七类图形。

进行图形组合

建立画图函数,把七类图整合在一起。

from pyecharts.charts import  Liquid,Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page,Geo,WordCloud # 各个图形的类
from pyecharts.globals import ChartType,SymbolType,ThemeType
from pyecharts import options as opts
# 1、柱状图
def barPage(): 
    bar = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION ,width='950px',height='450px'))
        .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [5, 20, 36, 10, 75, 90],stack='stack1')
        .add_yaxis("商家B", [1, 30, 36, 20, 65, 80],stack='stack2')
        .set_global_opts(title_opts=opts.TitleOpts(title="图1", subtitle="副标题"),
                    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)))
        .set_series_opts(label_opts=opts.LabelOpts(position='right'))
        .reversal_axis())
    return bar
#2.折线图
def linePage():
    line=(
     Line(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION,width='950px',height='450px'))
    .add_xaxis(['A','B','C','D','E'])
    .add_yaxis("数据展示",[33,5,35,20,30], 
            markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(name="自定义标记点", coord=['B', 5], value=5)])
        , is_connect_nones=True)
    .set_global_opts(title_opts=opts.TitleOpts(title="图2")) )
    return line
#3.迁徙图 (运输路径图)   
def mapMovePage():
    city_num=[('广州',10),('北京',10),('成都',10),('西安',10),('武汉',10),('上海',10)]
    start_end=[('广州','北京'),('广州','成都'),('广州','西安'),('广州','武汉'),('广州','上海')]
    mapMove=(
    Geo(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION)) # 图表大小,画布背景颜色
    .add_schema(maptype='china',
               itemstyle_opts=opts.ItemStyleOpts(color='#28527a',border_color='#9ba4b4'))#图背景颜色
    .add('',data_pair=city_num,color='black')
    .add('',data_pair=start_end,type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,color='blue',symbol_size=8),
         linestyle_opts=opts.LineStyleOpts(curve=0.2))
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))#不显示标签
    .set_global_opts(title_opts=opts.TitleOpts(title="图3",pos_left='50%')))    # 图表标题
    return mapMove
#4.进度图(水球图)
def liquidPage():
    c = (
    Liquid(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION))
    .add("lq", [0.3, 0.2, 0.4], is_outline_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="图4")))
    return c
#5.饼图
def piePage():
    inner_x_data = ["直达", "营销广告", "搜索引擎"]
    inner_y_data = [335, 679, 1548]
    inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]
    outer_x_data = ["直达", "营销广告", "搜索引擎", "邮件营销", "联盟广告", "视频广告", "百度", "谷歌", "必应", "其他"]
    outer_y_data = [335, 310, 234, 135, 1048, 251, 147, 102]
    outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)]
    kk=(
        Pie(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION))
        .add(
            series_name="访问来源",
            data_pair=inner_data_pair,
            radius=[0, "30%"],
            label_opts=opts.LabelOpts(position="inner"),)
        .add(
            series_name="访问来源",
            radius=["40%", "55%"],
            data_pair=outer_data_pair,
            label_opts=opts.LabelOpts(
                position="outside",
                formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                rich={
                    "a": {"color": "#999", "lineHeight": 22, "align": "center"},
                    "abg": {
                        "backgroundColor": "#e3e3e3",
                        "width": "100%",
                        "align": "right",
                        "height": 22,
                        "borderRadius": [4, 4, 0, 0],
                    },
                    "hr": {
                        "borderColor": "#aaa",
                        "width": "100%",
                        "borderWidth": 0.5,
                        "height": 0,
                    },
                    "b": {"fontSize": 16, "lineHeight": 33},
                    "per": {
                        "color": "#eee",
                        "backgroundColor": "#334455",
                        "padding": [2, 4],
                        "borderRadius": 2,
                    },
                },
            ),)
        .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical"))
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
            )
        ))
    return kk
#6.进度控制图
def gaugePage():
    cnew = (
        Gauge(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION))
        .add(
            "业务指标",
            [("指针", 77)],
            split_number=5,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(
                    color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")], width=30
                )
            ),
            detail_label_opts=opts.LabelOpts(formatter="{value}"),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="图6"),
            legend_opts=opts.LegendOpts(is_show=False),))
    return cnew
#7.词云图
def wmapPage():
    data = [
        ("出租车运营管理", "385"),
        ("供热管理", "375"),
        ("市容环卫", "355"),
        ("自然资源管理", "355"),
        ("粉尘污染", "335"),
        ("医疗卫生", "284"),
        ("粉煤灰污染", "284"),
        ("占道", "284"),
        ("供热发展", "254"),
        ("农村土地规划管理", "254"),
        ("生活噪音", "253"),
        ("供热单位影响", "253"),
        ("城市供电", "223"),
        ("房屋质量与安全", "223"),
        ("大气污染", "223"),
        ("房屋安全", "223"),
        ("文化活动", "223"),
        ("拆迁管理", "223"),
        ("公共设施", "223"),
        ("供气质量", "223"),
        ("供电管理", "223"),
        ("燃气管理", "152"),
        ("教育管理", "152"),
        ("医疗纠纷", "152"),
        ("执法监督", "152"),
        ("设备安全", "152"),
        ("政务建设", "152"),
        ("县区、开发区", "152"),
        ("宏观经济", "152"),
        ("教育管理", "112"),
        ("社会保障", "112"),
        ("生活用水管理", "112"),
        ("物业服务与管理", "112"),
        ("分类列表", "112"),
        ("农业生产", "112"),
        ("二次供水问题", "112"),
        ("城市公共设施", "92"),
        ("拆迁政策咨询", "92"),
        ("物业服务", "92"),
        ("物业管理", "92"),
        ("社会保障保险管理", "92"),
        ("低保管理", "92"),
        ("文娱市场管理", "72"),
        ("城市交通秩序管理", "72"),
        ("执法争议", "72"),
        ("压力容器安全", "71"),
        ("身份证管理", "71"),
        ("群众健身", "41"),
        ("工业排放污染", "41"),
        ("破坏森林资源", "41"),
        ("市场收费", "41"),
        ("生产资金", "41"),
        ("职业教育", "21"),
        ("物业资质管理", "21"),
        ("拆迁补偿", "21"),
        ("设施维护", "21"),
        ("市场外溢", "11"),
        ("占道经营", "11"),
        ("树木管理", "11"),
        ("农村基础设施", "11"),
        ("无水", "11"),
        ("供气质量", "11"),
    ]
    wmap=(
        WordCloud(init_opts=opts.InitOpts(width='950px',height='450px',theme=ThemeType.PURPLE_PASSION))
        .add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="图7", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
            ),
            tooltip_opts=opts.TooltipOpts(is_show=True),
        ))
    return wmap

把这些图整合在一起。

page = (
    Page(layout=Page.DraggablePageLayout)
    .add(
        barPage(),
        linePage(),
        mapMovePage(),
        liquidPage(),
        piePage(),
        gaugePage(),
    wmapPage()))
page.render("page_demo.html")

现在输出的page_demo.html是一个按由上到下排列的图,显然不是我们要的最终结果。

调整图形的排版

对上一步骤生成的page_demo.html图,进行排版, 排完以后点save config键,会生成一个json文件,把该文件复复制到代码的路径。运行以下代码:

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

new_page_demo.html即为新生成的大屏可视化图表。

总结

pyechart制作的大屏可视化的原理是通过生成json文件,按照json里对图形的排版,对图形进行了新的整合。

目录
相关文章
|
3月前
|
数据采集 数据可视化 数据挖掘
基于Python的数据分析与可视化实战
本文将引导读者通过Python进行数据分析和可视化,从基础的数据操作到高级的数据可视化技巧。我们将使用Pandas库处理数据,并利用Matplotlib和Seaborn库创建直观的图表。文章不仅提供代码示例,还将解释每个步骤的重要性和目的,帮助读者理解背后的逻辑。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供有价值的见解和技能。
278 0
|
1月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
416 7
|
2月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
107 5
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
2月前
|
数据可视化 搜索推荐 Shell
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
|
3月前
|
机器学习/深度学习 数据可视化 Python
Python实用记录(三):通过netron可视化模型
使用Netron工具在Python中可视化神经网络模型,包括安装Netron、创建文件和运行文件的步骤。
66 2
Python实用记录(三):通过netron可视化模型
|
3月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
2月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第33天】本文将介绍如何使用Python编程语言进行数据分析和可视化。我们将从数据清洗开始,然后进行数据探索性分析,最后使用matplotlib和seaborn库进行数据可视化。通过阅读本文,你将学会如何运用Python进行数据处理和可视化展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据处理与可视化——以气温数据分析为例
【10月更文挑战第12天】使用Python进行数据处理与可视化——以气温数据分析为例
455 0
|
3月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
200 0