pyecharts 可视化大屏制作

官方文档

简介 - pyecharts - A Python Echarts Plotting Library built with love.

先导入需要用到的包

import pyecharts.options as opts
from pyecharts.charts import Map3D, Bar, Line, Pie, Radar, Page
from pyecharts.faker import Faker
from pyecharts.globals import ChartType

先做个大标题吧,由于pyecharts没有标题组件,所以我决定用饼图的标题来做大标题。

# 标题
def title() -> Pie():
    title = (
        Pie(
            init_opts=opts.InitOpts(
                chart_id='view_title',
                width='100vw',
                # theme='dark',
            )
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="某机场可视化大屏",
                title_textstyle_opts=opts.TextStyleOpts(
                    font_size=32,
                    # color='white'
                ),
                # 标题居中
                pos_left='center'
            ),
            legend_opts=opts.LegendOpts(
                is_show=False
            )
        )
    )
    return title

绘制个3D地图用来看路线

# 中间地图
def map3d() -> Map3D:
    data_pair = [
        [(113.2700, 23.1300), (118.8062, 31.9208)], [(125.8154, 44.2584), (87.9236, 43.5883)],
        [(117.4219, 39.4189), (108.3843, 30.4397)], [(91.1100, 29.9700), (103.9526, 30.7617)],
        [(108.4790, 23.1152), (117.2900, 32.0581)], [(113.0823, 28.2568), (110.3893, 19.8516)],
        [(101.4038, 36.8207), (119.4543, 25.9222)], [(116.0046, 28.6633), (110.3467, 41.4899)],
    ]
    data_pair1 = [
        [(110.3653, 21.2662), (106.2428, 38.4731)], [(114.5395, 38.0364), (108.2733, 22.7812)]
    ]
    map3d = (
        # 3D地图
        Map3D(
            # 初始化配置项
            init_opts=opts.InitOpts(
                # theme='dark',  # 图表主题 white dark
                chart_id='view_map3d'
            )
        )
        # !!!!全局配置项!!!!
        .set_global_opts(
            # 标题配置项
            title_opts=opts.TitleOpts(
                title="",  # 主标题
            ),
            legend_opts=opts.LegendOpts(
                border_width=0,
                pos_bottom='50px',
                pos_left='500px'
            )
        )
        .add_schema(
            # 地图类型
            maptype='china',
            # 图元样式配置项
            itemstyle_opts=opts.ItemStyleOpts(
                # 图形的颜色
                color="#1661AB",
                # 描边宽度,默认不描边。
                border_width=0.8,
                # 图形的描边颜色。支持的颜色格式同 color,不支持回调函数。
                border_color="rgb(62,215,213)"
            ),
        )
        # 数据配置
        .add(
            # 系列名称,用于 tooltip 的显示,legend 的图例筛选
            series_name='类型1',
            # 数据项 (坐标点名称,坐标点值)
            data_pair=data_pair,
            # 叠加图的类型(目前只支持 Bar3D,Line3D,Lines3D,Scatter3D)
            type_=ChartType.LINES3D,
            # 仅在 Lines3D 起作用
            # 飞线的尾迹特效,参考 `series_options.Line3DEffectOpts`
            effect=opts.Lines3DEffectOpts(
                # 是否显示尾迹特效,默认不显示。
                is_show=True,
                # 尾迹特效的周期。
                period=4,
                # 尾迹的宽度。
                trail_width=3,
                # 尾迹的长度,范围从 0 到 1,为线条长度的百分比
                trail_length=0.5,
                # 尾迹的颜色,默认跟线条颜色相同。
                trail_color="white",
                # 尾迹的不透明度,默认跟线条不透明度相同
                trail_opacity=1,
            ),
            # 仅在 Line3D,Lines3D 起作用
            # 飞线的线条样式,参考 `series_options.LineStyleOpts`
            linestyle_opts=opts.LineStyleOpts(
                # 是否显示
                is_show=True,
                # 线宽
                width=3,
                # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形
                opacity=0.5,
                # 线的颜色
                color="#00ad5c",
            ),
        )
        .add(
            # 系列名称,用于 tooltip 的显示,legend 的图例筛选
            series_name='类型2',
            # 数据项 (坐标点名称,坐标点值)
            data_pair=data_pair1,
            # 叠加图的类型(目前只支持 Bar3D,Line3D,Lines3D,Scatter3D)
            type_=ChartType.LINES3D,
            # 仅在 Lines3D 起作用
            # 飞线的尾迹特效,参考 `series_options.Line3DEffectOpts`
            effect=opts.Lines3DEffectOpts(
                # 是否显示尾迹特效,默认不显示。
                is_show=True,
                # 尾迹特效的周期。
                period=4,
                # 尾迹的宽度。
                trail_width=3,
                # 尾迹的长度,范围从 0 到 1,为线条长度的百分比
                trail_length=0.5,
                # 尾迹的颜色,默认跟线条颜色相同。
                trail_color="white",
                # 尾迹的不透明度,默认跟线条不透明度相同
                trail_opacity=1,
            ),
            # 仅在 Line3D,Lines3D 起作用
            # 飞线的线条样式,参考 `series_options.LineStyleOpts`
            linestyle_opts=opts.LineStyleOpts(
                # 是否显示
                is_show=True,
                # 线宽
                width=3,
                # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形
                opacity=0.5,
                # 线的颜色
                color="yellow",
            ),
        )
    )
    return map3d

 绘制个折线图,用来查看延误数

# 左边折线图
def line() -> Line():
    line = (
        # 折线图
        Line(
            # 初始化配置项
            init_opts=opts.InitOpts(
                # theme='dark',  # 图表主题 white dark
                chart_id='view_lines'
            )
        )
        # !!!!全局配置项!!!!
        .set_global_opts(
            # 标题配置项
            title_opts=opts.TitleOpts(
                title="航班延误数",  # 主标题
            ),
            legend_opts=opts.LegendOpts(
                border_width=0,
                pos_right='30px'
            ),
            # 区域缩放配置项
            # datazoom_opts=opts.DataZoomOpts(
            #     is_show=False,  # 是否显示 组件。如果设置为 false,不会显示,但是数据过滤的功能还存在
            #     type_="slider",  # 组件类型,可选 "slider", "inside"
            #     orient="horizontal"  # 可选值为:'horizontal', 'vertical'
            # )
        )
        # X轴配置
        .add_xaxis(Faker.week)
        # Y轴配置
        .add_yaxis("FA293", Faker.values())
        .add_yaxis("Y6T28", Faker.values())
        # 颜色配置
        .set_colors(['red', 'lightblue'])
    )
    return line

绘制个条形图,用来查看和排行航班各舱位人数和总人数

# 左边条形图
def bar() -> Bar():
    x_data = ['航班1', '航班2', '航班3', '航班4', '航班5', '航班6', '航班7']
    bar = (
        # 条形图
        Bar(
            # 初始化配置项
            init_opts=opts.InitOpts(
                # theme='dark',  # 图表主题 white dark
                chart_id='view_bar'
            )
        )
        # !!!!全局配置项!!!!
        .set_global_opts(
            # 标题配置项
            title_opts=opts.TitleOpts(
                title="各航班人数",  # 主标题
            ),
            legend_opts=opts.LegendOpts(
                border_width=0,
                pos_right='30px'
            ),
            # # 区域缩放配置项
            # datazoom_opts=opts.DataZoomOpts(
            #     is_show=True,  # 是否显示 组件。如果设置为 false,不会显示,但是数据过滤的功能还存在
            #     type_="slider",  # 组件类型,可选 "slider", "inside"
            #     orient="horizontal"  # 可选值为:'horizontal', 'vertical'
            # )
        )
        # X轴配置
        .add_xaxis(xaxis_data=x_data)
        # Y轴配置
        .add_yaxis("经济舱", Faker.values(), stack='all', is_realtime_sort=True)
        .add_yaxis("商务舱", Faker.values(), stack='all')
        .add_yaxis("头等舱", Faker.values(), stack='all')
        # 颜色配置
        .set_colors(['lightblue', 'lightgreen', 'yellow'])
        .set_series_opts(
            label_opts=opts.LabelOpts(
                is_show=False
            ),
        )
    )
    return bar

 绘制个饼图,用来查看今日各舱位人数和占比

# 右边饼图
def pie() -> Pie():
    x_data = ['头等舱', '商务舱', '经济舱']
    y_data = [7652, 10293, 20376]
    pie = (
        # 饼图
        Pie(
            # 初始化配置项
            init_opts=opts.InitOpts(
                # theme='dark',  # 图表主题 white dark
                chart_id='view_pie'
            )
        )
        # !!!!全局配置项!!!!
        .set_global_opts(
            # 标题配置项
            title_opts=opts.TitleOpts(
                title="今日舱位人数占比",  # 主标题
            ),
            legend_opts=opts.LegendOpts(
                border_width=0,
                pos_left='right'
            )
        )
        # 数据配置
        .add(
            # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
            series_name="所有航班",
            # 系列数据项,格式为 [(key1, value1), (key2, value2)]
            data_pair=[list(z) for z in zip(x_data, y_data)],
            radius=['35%', '60%'],
            # center=['50%', '50%'],
            # rosetype="radius"
        )
        # 颜色配置
        # .set_colors(Faker.visual_color)
    )
    return pie

绘制个雷达图,用来实时查看天气预报

# 右边雷达图
def radar() -> Radar():
    radar = (
        # 雷达图
        Radar(
            # 初始化配置项
            init_opts=opts.InitOpts(
                # theme='dark',  # 图表主题 white dark
                chart_id='view_radar'
            )
        )
        # !!!!全局配置项!!!!
        .set_global_opts(
            # 标题配置项
            title_opts=opts.TitleOpts(
                title="实时天气预报",  # 主标题
            ),
            legend_opts=opts.LegendOpts(
                pos_left='right',
                border_width=0,
                # orient='vertical'
            )
        )

        # 指示器配置
        .add_schema(
            shape='circle',
            center=['50%', '55%'],
            radius='70%',
            schema=[
                opts.RadarIndicatorItem(name="云量"),
                opts.RadarIndicatorItem(name="气温"),
                opts.RadarIndicatorItem(name="气压"),
                opts.RadarIndicatorItem(name="辐射"),
                opts.RadarIndicatorItem(name="湿度"),
                opts.RadarIndicatorItem(name="风速"),
                opts.RadarIndicatorItem(name="能见度")
            ]
        )
        # 数据配置
        .add(
            # 系列名称,用于 tooltip 的显示,legend 的图例筛选
            series_name='现在',
            # 系列数据项
            data=[Faker.values(0, 100)],
            # 系列颜色
            color="yellow",
            areastyle_opts=opts.AreaStyleOpts(
                color='yellow',
                opacity=0.4
            )
        )
        .add(
            series_name='一个小时后',
            data=[Faker.values(1, 100)],
            color="aqua",
            areastyle_opts=opts.AreaStyleOpts(
                color='aqua',
                opacity=0.3
            )
        )
        .add(
            series_name='两个小时后',
            data=[Faker.values(1, 100)],
            color="chartreuse",
            areastyle_opts=opts.AreaStyleOpts(
                color='chartreuse',
                opacity=0.3
            )
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(
                is_show=False
            )
        )
    )
    return radar

设置页面布局,输出HTML文件

# 合并页面
def page() -> Page():
    page = (
        Page(
            # 页面标题
            page_title='某机场可视化大屏',
            # 布局配置项
            layout=Page.DraggablePageLayout
        )
        .add(title(), map3d(), bar(), line(), pie(), radar())
    )
    page.render(path='visual.html')

写到这里,先运行一下看看效果

page()

运行完后生成html文件再注释掉page()。

然后拖拽组件,设置好布局,点击Save Config下载好json文件,我的json文件如下:

[
  {"cid":"view_title","width":"100vw","height":"44px","top":"0","left":"0"},
  {"cid":"view_map3d","width":"100vw","height":"696px","top":"45px","left":"0"},
  {"cid":"view_lines","width":"400px","height":"336px","top":"45px","left":"0"},
  {"cid":"view_bar","width":"400px","height":"362px","top":"379px","left":"0"},
  {"cid":"view_pie","width":"400px","height":"350px","top":"45px","left":"1136px"},
  {"cid":"view_radar","width":"400px","height":"352px","top":"389px","left":"1136px"}
]

 把json文件放在同级目录下,重命名为visual.json

最后再加上以下代码,

    # 用于 DraggablePageLayout 布局重新渲染图表
    page.save_resize_html(
        # Page 第一次渲染后的 html 文件
        source="visual.html",
        # 布局配置文件
        cfg_file="visual.json",
        # 重新生成的 .html 存放路径
        dest="visual_new.html"
    )
    return page


if __name__ == '__main__':
    page()

效果就完成啦

 图片发不出来,最终效果如下:

https://s1.ax1x.com/2023/01/22/pSJA9o9.png

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值