Python数据可视化 - Pyecharts绘图示例


一、Pyecharts简介及安装

1. Pyecharts简介

Pyecharts 是基于 Python 的开源数据可视化库,底层依赖 JavaScript 图表库 ECharts,能将数据转化为交互式、高可定制的动态图表。它支持折线图、柱状图、地图、词云图等数十种图表类型,具备缩放、数据提示、动态动画等交互功能,可通过链式调用语法灵活配置颜色、坐标轴、图例等细节,兼容 Jupyter Notebook、Web 页面等多环境,适合数据分析师、开发人员、科研人员等快速实现数据可视化。

其核心优势在于易用性与丰富的表现力:既可以直接读取 CSV、数据库等数据源,也能与 Pandas 等数据处理库结合,轻松处理结构化数据;生成的图表不仅能输出为 HTML 文件,还可通过子库渲染为图片,或嵌入 Flask、Django 等 Web 框架。尽管复杂图表的配置项学习成本较高,且需依赖浏览器渲染,但凭借官方完善的文档、示例库及活跃的社区生态,Pyecharts 已成为 Python 数据可视化领域的主流工具之一。

使用版本:

pythonpyechartsbeautifulsoup4
版本3.8.52.31.04.12.3

2. 安装Pyecharts

执行如下命令安装Pyecharts。

pip install pyecharts==2.0.8 -i https://mirrors.aliyun.com/pypi/simple

二、准备数据

用于演示的示例数据在job_category.csv文件中,文件内容数据如下图所示。

在这里插入图片描述


三、饼图示例

1. 初始化选项配置

在这里插入图片描述

2. 饼图相关设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 全局配置项

3.1 标题配置项

在这里插入图片描述
在这里插入图片描述

3.2 图例配置项

在这里插入图片描述

在这里插入图片描述

3.3 提示框配置项

在这里插入图片描述

在这里插入图片描述

3.4 工具箱配置项

在这里插入图片描述

3.5 视觉映射配置项

在这里插入图片描述

在这里插入图片描述

4. 系列配置项

4.1 标签选项配置

在这里插入图片描述

在这里插入图片描述

4.2 图元样式配置项

在这里插入图片描述

5. 示例代码

import logging
from pathlib import Path

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Pie

# 配置日志记录
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')


def load_data(csv_file_path):
    try:
        data = pd.read_csv(csv_file_path)
        return data
    except FileNotFoundError:
        print("未找到指定的 CSV 文件,请检查文件路径和文件名。")
    except Exception as e:
        print(f"加载数据时出现错误: {e}")


# 职位一级分类可视化(饼图)
def pip_chart(data):
    html_file_path = "./job_category.html"
    path = Path(html_file_path)
    path.parent.mkdir(parents=True, exist_ok=True)
    pie = Pie(
        init_opts=opts.InitOpts(
            width="750px",
            height="500px",
            chart_id="job_category",
            # renderer="canvas",
            page_title="职位分类饼图",
            # theme="lightblue",
            bg_color="lightblue",
            animation_opts=opts.AnimationOpts()
        )
    )
    pie.add(
        series_name="职位数量",
        # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        data_pair=list(zip(data['category'], data['counts'])),
        # 从调色盘 option.color 中取色的策略,可取值为:
        # 'series':按照系列分配调色盘中的颜色,同一系列中的所有数据都是用相同的颜色;
        # 'data':按照数据项分配调色盘中的颜色,每个数据项都使用不同的颜色。
        color_by="data",
        # 是否启用图例 hover 时的联动高亮。
        is_legend_hover_link=True,
        # 选中模式的配置,表示是否支持多个选中,默认关闭,支持布尔值和字符串。
        # 字符串取值可选'single','multiple','series' 分别表示单选,多选以及选择整个系列。
        selected_mode="single",
        # 选中扇区的偏移距离。
        selected_offset=15,
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        radius=["50px", "100px"],
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        center=["50%", "50%"],
        # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
        # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
        # area:所有扇区圆心角相同,仅通过半径展现数据大小
        rosetype="radius",
        # # 饼图的扇区是否是顺时针排布。
        is_clockwise=True,
        # 起始角度,支持范围 [0,360]
        start_angle=90,
        # 最小的扇区角度(0 ~ 360),用于防止某个值过小导致扇区太小影响交互。
        min_angle=0,
        # 小于这个角度(0 ~ 360)的扇区,不显示标签(label 和 labelLine)。
        min_show_label_angle=0,
        # 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。
        # 如果不需要开启该策略,例如圆环图这个例子中需要强制所有标签放在中心位置,可以将该值设为 false。
        is_avoid_label_overlap=True,
        # 是否在数据和为0(一般情况下所有数据为0) 的时候仍显示扇区。
        is_still_show_zero_sum=True,
        # 饼图百分比数值的精度,默认保留小数点后两位。
        percent_precision=2,
        # 是否在无数据的时候显示一个占位圆。
        is_show_empty_circle=True,
        # 饼图引导线配置,参考 `chart_options.PieLabelLineOpts`
        label_line_opts=opts.PieLabelLineOpts(
            # 是否显示视觉引导线。
            is_show=True,
            # 是否显示在图形上方
            is_show_above=False,
            # 视觉引导线第一段的长度。
            length=15,
            # 视觉引导项第二段的长度。
            length_2=10,
            # 是否平滑视觉引导线,默认不平滑,可以设置成 true 平滑显示。
            # 也可以设置为 0 到 1 的值,表示平滑程度。
            smooth=False,
            # 通过调整第二线段的长度,限制引导线两端之间最小的夹角
            # 以防止过小的夹角导致显示不美观。
            # 可以设置为 0 - 180 度。
            min_turn_angle=90,
            # 线条样式,参考 `LineStyleOpts`
            linestyle_opts=opts.LineStyleOpts(
                # 是否显示
                is_show=False,
                # 线宽。
                width=5,
                # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                opacity=0.5,
                # 线的弯曲度,0 表示完全不弯曲
                curve=0,
                # 线的类型。可选:
                # 'solid', 'dashed', 'dotted'
                type_="solid",
                # 线的颜色。
                color=None,
            ),
            # 通过调整第二线段的长度,限制引导线与扇区法线的最大夹角
            # 设置为小于 90 度的值保证引导线不会和扇区交叉。
            # 可以设置为 0 - 180 度。
            max_surface_angle=90,
        ),
        # 高亮配置项,参考 `global_options.EmphasisOpts`
        emphasis_opts=opts.EmphasisOpts(),
        # 可以定义 data 的哪个维度被编码成什么。
        encode=None,
    )
    pie.set_global_opts(
        title_opts=opts.TitleOpts(
            # 是否显示标题组件。
            is_show=True,
            # 主标题文本,支持使用 \n 换行。
            title="职位分类饼图",
            # 主标题跳转 URL 链接
            title_link='https://www.baidu.com',
            # 主标题跳转链接方式,默认值是: blank
            # 可选参数: 'self', 'blank','self' 当前窗口打开; 'blank' 新窗口打开
            title_target=None,
            # 副标题文本,支持使用 \n 换行。
            subtitle="饼图副标题",
            # 副标题跳转 URL 链接
            subtitle_link='https://www.baidu.com',
            # 副标题跳转链接方式,默认值是: blank
            # 可选参数: 'self', 'blank','self' 当前窗口打开; 'blank' 新窗口打开
            subtitle_target=None,
            # title 组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='10%',
            # title 组件离容器右侧的距离。
            # pos_right=None,
            # title 组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='10%',
            # title 组件离容器下侧的距离。
            # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
            # pos_bottom=None,
            # 标题内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。
            padding=5,
            # 主副标题之间的间距。
            item_gap=30,
            # 整体(包括 text 和 subtext)的水平对齐。
            # 可选值:'auto'、'left'、'right'、'center'。
            text_align="auto",
            # 整体(包括 text 和 subtext)的垂直对齐。
            # 可选值:'auto'、'left'、'right'、'center'。
            text_vertical_align="auto",
            # 是否触发事件。
            is_trigger_event=False,
            # 主标题字体样式配置项,参考 `series_options.TextStyleOpts`
            title_textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=20,
                font_weight="bold"
            ),
            # 副标题字体样式配置项,参考 `series_options.TextStyleOpts`
            subtitle_textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=16
            ),
        ),
        legend_opts=opts.LegendOpts(
            # 图例的类型。可选值:'plain':普通图例。缺省就是普通图例。
            # 'scroll':可滚动翻页的图例。当图例数量较多时可以使用。
            type_=None,
            # 图例选择的模式,控制是否可以通过点击图例改变系列的显示状态。默认开启图例选择,可以设成 false 关闭
            # 除此之外也可以设成 'single' 或者 'multiple' 使用单选或者多选模式。
            selected_mode=None,
            # 是否显示图例组件,默认显示
            is_show=True,
            # 图例组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='75%',
            # 图例组件离容器右侧的距离。
            # pos_right=None,
            # 图例组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='15%',
            # 图例组件离容器下侧的距离。
            # pos_bottom=None,
            # 图例列表的布局朝向。可选:'horizontal', 'vertical'
            orient='vertical',
            # 图例标记和文本的对齐。默认自动(auto)
            # 根据组件的位置和 orient 决定
            # 当组件的 left 值为 'right' 以及纵向布局(orient 为 'vertical')的时候为右对齐,即为 'right'。
            # 可选参数: `auto`, `left`, `right`
            align='left',
            # 图例内边距,单位px,默认各方向内边距为5
            padding=5,
            # 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。
            # 默认间隔为 10
            item_gap=15,
            # 图例标记的图形宽度。默认宽度为 25
            item_width=35,
            # 图例标记的图形高度。默认高度为 14
            item_height=20,
            # 图例关闭时的颜色。默认是 #ccc
            inactive_color=None,
            # 图例组件字体样式,参考 `series_options.TextStyleOpts`
            textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=14
            ),
            # 图例项的 icon。
            # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
            legend_icon=None,
            # 图例背景色,默认透明。
            background_color="transparent",
            # 图例的边框颜色。支持的颜色格式同 backgroundColor。
            border_color="#000",
            # 图例的边框线宽。
            border_width=1,
            # 图例的边框圆角半径,单位px,支持传入数组分别指定 4 个圆角半径。
            border_radius=5,
            # legend.type 为 'scroll' 时有效。图例控制块中,按钮和页信息之间的间隔。
            page_button_item_gap=5,
            # legend.type 为 'scroll' 时有效。图例控制块和图例项之间的间隔。
            page_button_gap=None,
            # legend.type 为 'scroll' 时有效。图例控制块的位置。可选值为:
            # 'start':控制块在左或上。
            # 'end':控制块在右或下。
            page_button_position="end",
            # legend.type 为 'scroll' 时有效。
            # 图例控制块中,页信息的显示格式。默认为 '{current}/{total}',其中 {current} 是当前页号(从 1 开始计数),{total} 是总页数。
            # 如果 pageFormatter 使用函数,须返回字符串,参数为:
            # {
            #     current: number
            #     total: number
            # }
            page_formatter="{current}/{total}",
            # legend.type 为 'scroll' 时有效。图例控制块的图标。
            page_icon=None,
            # legend.type 为 'scroll' 时有效。翻页按钮的颜色。
            page_icon_color="#2f4554",
            # legend.type 为 'scroll' 时有效。翻页按钮不激活时(即翻页到头时)的颜色。
            page_icon_inactive_color="#aaa",
            # legend.type 为 'scroll' 时有效。
            # 翻页按钮的大小。可以是数字,也可以是数组,如 [10, 3],表示 [宽,高]。
            page_icon_size=15,
            # 图例翻页是否使用动画。
            is_page_animation=None,
            # 图例翻页时的动画时长。
            page_animation_duration_update=800,
            # 图例组件中的选择器按钮,目前包括全选和反选两种功能。
            # 默认不显示,用户可手动开启,也可以手动配置每个按钮的标题。
            selector=False,
            # 选择器的位置,可以放在图例的尾部或者头部,对应的值分别为 'end' 和 'start'。
            # 默认情况下,图例横向布局的时候,选择器放在图例的尾部;图例纵向布局的时候,选择器放在图例的头部。
            selector_position="auto",
            # 选择器按钮之间的间隔。
            selector_item_gap=7,
            # 选择器按钮与图例组件之间的间隔。
            selector_button_gap=10,
        ),
        tooltip_opts=opts.TooltipOpts(
            # 是否显示提示框组件,包括提示框浮层和 axisPointer。
            is_show=True,
            # 触发类型。可选:
            # 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
            # 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
            # 'none': 什么都不触发
            trigger="item",
            # 提示框触发的条件,可选:
            # 'mousemove': 鼠标移动时触发。
            # 'click': 鼠标点击时触发。
            # 'mousemove|click': 同时鼠标移动和点击时触发。
            # 'none': 不在 'mousemove' 或 'click' 时触发,
            trigger_on="mousemove|click",
            # 指示器类型。可选
            # 'line':直线指示器
            # 'shadow':阴影指示器
            # 'none':无指示器
            # 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
            axis_pointer_type="line",
            # 是否显示提示框浮层,默认显示。
            # 只需 tooltip 触发事件或显示 axisPointer 而不需要显示内容时可配置该项为 false。
            is_show_content=True,
            # 是否永远显示提示框内容,
            # 默认情况下在移出可触发提示框区域后一定时间后隐藏,设置为 true 可以保证一直显示提示框内容。
            is_always_show_content=False,
            # 浮层显示的延迟,单位为 ms,默认没有延迟,也不建议设置。
            show_delay=0,
            # 浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效。
            hide_delay=100,
            # 提示框浮层的位置,默认不设置时位置会跟随鼠标的位置。
            # 1、通过数组配置:
            # 绝对位置,相对于容器左侧 10px, 上侧 10 px ===> position: [10, 10]
            # 相对位置,放置在容器正中间 ===> position: ['50%', '50%']
            # 2、通过回调函数配置
            # 3、固定参数配置:'inside','top','left','right','bottom'
            position=None,
            # 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
            # 字符串模板 模板变量有:
            # {a}:系列名。
            # {b}:数据名。
            # {c}:数据值。
            # {@xxx}:数据中名为 'xxx' 的维度的值,如 {@product} 表示名为 'product'` 的维度的值。
            # {@[n]}:数据中维度 n 的值,如{@[3]}` 表示维度 3 的值,从 0 开始计数。
            # 示例:formatter: '{b}: {@score}'
            formatter="{a} <br/>{b}: {c} ({d}%)",
            # 提示框浮层的背景颜色。
            background_color='#ff68',
            # 提示框浮层的边框颜色。
            border_color=None,
            # 提示框浮层的边框宽。
            border_width=0,
            # 文字样式配置项,参考 `series_options.TextStyleOpts`
            textstyle_opts=opts.TextStyleOpts(
                color="#00f8",
                font_size=14
            ),
        ),
        toolbox_opts=opts.ToolboxOpts(
            # 是否显示工具栏组件
            is_show=True,
            # 工具栏 icon 的布局朝向。
            # 可选:'horizontal', 'vertical'
            orient="vertical",
            # 工具栏组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐
            pos_left="right",
            # 工具栏组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='top',
            # 各工具配置项,参考 `global_options.ToolBoxFeatureOpts`
            feature=opts.ToolBoxFeatureOpts(),
        ),
        brush_opts=opts.BrushOpts(),
        visualmap_opts=opts.VisualMapOpts(
            # 是否显示视觉映射配置
            is_show=True,
            # 映射过渡类型,可选,"color", "size"
            type_="color",
            # 指定 visualMapPiecewise 组件的最小值。
            min_=100,
            # 指定 visualMapPiecewise 组件的最大值。
            max_=8000,
            # 两端的文本,如['High', 'Low']。
            range_text=['High', 'Low'],
            # visualMap 图元以及其附属物(如文字标签)的透明度。
            # range_opacity=[0.1, 1],
            # 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
            orient="vertical",
            # visualMap 组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='10%',
            # visualMap 组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='bottom',
            # 指定取哪个系列的数据,默认取所有系列。
            # series_index=None,
            # 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
            is_calculable=True,
            # 是否为分段型
            # is_piecewise=True,
            # 是否反转 visualMap 组件
            is_inverse=False,
            # 数据展示的小数精度。
            # 连续型数据平均分段,精度根据数据自动适应。
            # 连续型数据自定义分段或离散数据根据类别分段模式,精度默认为0(没有小数)。
            precision=0,
            # 图形的宽度,即长条的宽度。
            # item_width=20,
            # 图形的高度,即长条的高度。
            # item_height=130,
            # visualMap 组件的背景色。
            # background_color: Optional[str] = None,
            # visualMap 组件的边框颜色。
            # border_color: Optional[str] = None,
            # visualMap 边框线宽,单位px。
            # border_width: int = 0,
            # 文字样式配置项,参考 `series_options.TextStyleOpts`
            # textstyle_opts: Union[TextStyleOpts, dict, None] = None,
        ),
    )
    pie.set_series_opts(
        # 设置标签位置
        # {a}:系列名称(如 add_yaxis 中的第一个参数)。
        # {b}:数据项名称(如 add_xaxis 中的值)。
        # {c}:数据项值(如 add_yaxis 中的具体数值)。
        # {d}:百分比(仅在饼图、漏斗图等支持百分比的图表中有效)。
        label_opts=opts.LabelOpts(
            # 是否显示标签。
            is_show=True,
            # 标签的位置。可选
            # 'top','left','right','bottom','inside','insideLeft','insideRight'
            # 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
            # 'insideTopRight','insideBottomRight'
            # position="top",
            # 文字的颜色。
            # 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
            color='#0009',
            # 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
            # distance=None,
            # 文字的字体大小
            font_size=12,
            # 文字字体的风格,可选:
            # 'normal','italic','oblique'
            font_style='normal',
            # 文字字体的粗细,可选:
            # 'normal','bold','bolder','lighter'
            font_weight=None,
            # 文字的字体系列
            # 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
            font_family=None,
            # 标签旋转。从 -90 度到 90 度。正值是逆时针。
            rotate=30,
            # 刻度标签与轴线之间的距离。
            margin=8,
            # 坐标轴刻度标签的显示间隔,在类目轴中有效。
            # 默认会采用标签不重叠的策略间隔显示标签。
            # 可以设置成 0 强制显示所有标签。
            # 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
            # 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
            # (index:number, value: string) => boolean
            # 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。
            interval=None,
            # 文字水平对齐方式,默认自动。可选:
            # 'left','center','right'
            horizontal_align=None,
            # 文字垂直对齐方式,默认自动。可选:
            # 'top','middle','bottom'
            vertical_align=None,
            # 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
            # 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
            # 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
            # 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:

            # 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
            # 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
            # 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
            # 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
            # 示例:formatter: '{b}: {@score}'
            formatter="{b}:{c}",
            #     # 文字块背景色。
            #     # 可以使用颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'。
            # background_color: Optional[str] = None,
            #     # 文字块边框颜色。如果设置为 'inherit',则为视觉映射得到的颜色,如系列色。
            # border_color: Optional[str] = None,
            #     # 文字块边框宽度。
            # border_width: Optional[Numeric] = None,
            #     # 文字块的圆角。
            # border_radius: Optional[Numeric] = None,
            #     # 文字块的内边距。例如:
            #     # padding: [3, 4, 5, 6]:表示 [上, 右, 下, 左] 的边距。
            #     # padding: 4:表示 padding: [4, 4, 4, 4]。
            #     # padding: [3, 4]:表示 padding: [3, 4, 3, 4]。
            #     # 注意,文字块的 width 和 height 指定的是内容高宽,不包含 padding。
            # padding: Union[Numeric, Sequence[Numeric], None] = None,
            #     # 文本显示宽度。
            # text_width: Optional[Numeric] = None,
            #     # 文本显示高度。
            # text_height: Optional[Numeric] = None,
            #     # 文字本身的描边颜色。
            #     # 如果设置为 'inherit',则为视觉映射得到的颜色,如系列色。
            # text_border_color: Optional[str] = None,
            #     # 文字本身的描边宽度。
            # text_border_width: Optional[Numeric] = None,
            #     # 文字本身的阴影颜色。
            # text_shadow_color: Optional[str] = None,
            #     # 文字本身的阴影长度。
            # text_shadow_blur: Optional[Numeric] = None,
            #     # 文字本身的阴影 X 偏移。
            # text_shadow_offset_x: Optional[Numeric] = None,
            #     # 文字本身的阴影 Y 偏移。
            # text_shadow_offset_y: Optional[Numeric] = None,
            #     # 文字超出宽度是否截断或者换行。配置width时有效
            #     # 'truncate' 截断,并在末尾显示ellipsis配置的文本,默认为...
            #     # 'break' 换行
            #     # 'breakAll' 换行,跟'break'不同的是,在英语等拉丁文中,'breakAll'还会强制单词内换行
            # overflow: Optional[str] = None,
            #     # 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
            #     # 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
            # rich: Optional[dict] = None,
            #     # 是否开启数值动画,默认关闭
            # is_value_animation: bool = False,
        ),
        areastyle_opts=opts.AreaStyleOpts(
            # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
            opacity=0.5,
            # 填充的颜色。
            color='#00f'
        ),
        itemstyle_opts=opts.ItemStyleOpts(
            # 图形的颜色。
            color="blue",
            # 阴线 图形的颜色。
            color0="blue",
            # 图形的描边颜色。支持的颜色格式同 color,不支持回调函数。
            border_color="blue",
            # 阴线 图形的描边颜色。
            border_color0="red",
            # 描边宽度,默认不描边。
            border_width=5,
            # 描边边框线条类型,支持 'dashed', 'dotted'。
            border_type=None,
            # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
            opacity=1,
            # 区域的颜色。
            area_color='yellow',
        ),
    )
    pie.render(html_file_path)


if __name__ == '__main__':
    pip_chart(load_data("./job_category.csv"))

四、柱状图示例

1. 柱状图相关设置

在这里插入图片描述

在这里插入图片描述

2. 全局配置项

2.1 坐标轴配置项

2.1.1 常规配置项

在这里插入图片描述

2.1.2 坐标轴刻度线配置项

在这里插入图片描述

2.1.3 坐标轴刻度配置项

在这里插入图片描述

2.1.4 坐标轴标签配置项

在这里插入图片描述

在这里插入图片描述

2.1.5 坐标轴指示器配置项

在这里插入图片描述

2.1.6 坐标轴名称文字样式

在这里插入图片描述

2.1.7 分割区域配置项

在这里插入图片描述

2.1.8 分割线配置项

在这里插入图片描述
在这里插入图片描述

2.2 数据缩放配置项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 系列配置项

3.1 标记点配置项

在这里插入图片描述

4. 示例代码

import logging
from pathlib import Path

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar

# 配置日志记录
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')


def load_data(csv_file_path):
    try:
        data = pd.read_csv(csv_file_path)
        return data
    except FileNotFoundError:
        print("未找到指定的 CSV 文件,请检查文件路径和文件名。")
    except Exception as e:
        print(f"加载数据时出现错误: {e}")


# 职位一级分类可视化(柱状图)
def bar_chart(data):
    html_file_path = "./job_category.html"
    path = Path(html_file_path)
    path.parent.mkdir(parents=True, exist_ok=True)
    bar = Bar(
        init_opts=opts.InitOpts(
            width="750px",
            height="500px",
            chart_id="job_category",
            # renderer="canvas",
            page_title="职位分类柱状图",
            # theme="lightblue",
            bg_color="lightblue",
            animation_opts=opts.AnimationOpts()
        )
    )

    category_list = data['category'].tolist()
    count_list = data['counts'].tolist()
    bar.add_xaxis(category_list)
    bar.add_yaxis(
        # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        series_name="职位数量",
        # 系列数据
        y_axis=count_list,
        # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
        xaxis_index=None,
        # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
        yaxis_index=None,
        # 使用的极坐标系的 index,在单个图表实例中存在多个极坐标系的时候有用。
        polar_index=None,
        # 是否在环形柱条两侧使用圆弧效果。仅对极坐标系柱状图有效。
        is_round_cap=None,
        # 从调色盘 option.color 中取色的策略,可取值为:
        # 'series':按照系列分配调色盘中的颜色,同一系列中的所有数据都是用相同的颜色;
        # 'data':按照数据项分配调色盘中的颜色,每个数据项都使用不同的颜色。
        color_by='data',
        #     # 是否启用图例 hover 时的联动高亮
        # is_legend_hover_link: bool = True,
        #     # 系列 label 颜色
        # color: Optional[str] = None,
        # 是否开启实时排序,默认为 False
        is_realtime_sort=False,
        #     # 是否显示柱条的背景色。通过 backgroundStyle 配置背景样式。
        # is_show_background: bool = False,
        #     # 每一个柱条的背景样式。需要将 showBackground 设置为 true 时才有效。
        # background_style: types.Union[types.BarBackground, dict, None] = None,
        #     # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
        # stack: Optional[str] = None,
        #     # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。关于如何定制数值的堆叠方式,参见 stackStrategy。
        #     # 注:目前 stack 只支持堆叠于 'value' 和 'log' 类型的类目轴上,不支持 'time' 和 'category' 类型的类目轴。
        # stack_strategy: types.Optional[str] = "samesign",
        #     # 堆积数值的策略,前提是stack属性已被设置。其值可以是:
        #     # 'samesign' 只在要堆叠的值与当前累积的堆叠值具有相同的正负符号时才堆叠。
        #     # 'all' 堆叠所有的值,不管当前或累积的堆叠值的正负符号是什么。
        #     # 'positive' 只堆积正值。
        #     # 'negative' 只堆叠负值。
        # sampling: types.Optional[str] = None,
        #     # 鼠标悬浮时在图形元素上时鼠标的样式是什么。同 CSS 的 cursor。
        # cursor: types.Optional[str] = "pointer",
        # 柱条的宽度,不设时自适应。
        # 可以是绝对值例如 40 或者百分数例如 '60%'。百分数基于自动计算出的每一类目的宽度。
        # 在同一坐标系上,此属性会被多个 'bar' 系列共享。此属性应设置于此坐标系中最后一个 'bar' 系列上才会生效,并且是对此坐标系中所有 'bar' 系列生效。
        bar_width=None,
        #     # 柱条的最大宽度。比 barWidth 优先级高。
        # bar_max_width: types.Union[types.Numeric, str] = None,
        #     # 柱条的最小宽度。在直角坐标系中,默认值是 1。否则默认值是 null。比 barWidth 优先级高。
        # bar_min_width: types.Union[types.Numeric, str] = None,
        #     # 柱条最小高度,可用于防止某数据项的值过小而影响交互。
        # bar_min_height: types.Numeric = 0,
        # 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
        category_gap="20%",
        #     # 不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。
        #     # 如果想要两个系列的柱子重叠,可以设置 gap 为 '-100%'。这在用柱子做背景的时候有用。
        # gap: Optional[str] = "30%",
        #     # 是否开启大数据量优化,在数据图形特别多而出现卡顿时候可以开启。
        #     # 开启后配合 largeThreshold 在数据量大于指定阈值的时候对绘制进行优化。
        #     # 缺点:优化后不能自定义设置单个数据项的样式。
        # is_large: bool = False,
        #     # 开启绘制优化的阈值。
        # large_threshold: types.Numeric = 400,
        #     # 渐进式渲染时每一帧绘制图形数量,设为 0 时不启用渐进式渲染,支持每个系列单独配置。
        # progressive: types.Optional[types.Numeric] = None,
        #     # 启用渐进式渲染的图形数量阈值,在单个系列的图形数量超过该阈值时启用渐进式渲染。
        # progressive_threshold: types.Optional[types.Numeric] = None,
        #     # 分片的方式。可选值:
        #     # 'sequential': 按照数据的顺序分片。缺点是渲染过程不自然。
        #     # 'mod': 取模分片,即每个片段中的点会遍布于整个数据,从而能够视觉上均匀得渲染。
        # progressive_chunk_mode: types.Optional[str] = None,
        #     # 使用 dimensions 定义 series.data 或者 dataset.source 的每个维度的信息。
        #     # 注意:如果使用了 dataset,那么可以在 dataset.source 的第一行/列中给出 dimension 名称。
        #     # 于是就不用在这里指定 dimension。
        #     # 但是,如果在这里指定了 dimensions,那么 ECharts 不再会自动从 dataset.source 的第一行/列中获取维度信息。
        # dimensions: types.Union[types.Sequence, None] = None,
        #     # 当使用 dataset 时,seriesLayoutBy 指定了 dataset 中用行还是列对应到系列上,也就是说,系列“排布”到 dataset 的行还是列上。可取值:
        #     # 'column':默认,dataset 的列对应于系列,从而 dataset 中每一列是一个维度(dimension)。
        #     # 'row':dataset 的行对应于系列,从而 dataset 中每一行是一个维度(dimension)。
        # series_layout_by: str = "column",
        #     # 如果 series.data 没有指定,并且 dataset 存在,那么就会使用 dataset。
        #     # datasetIndex 指定本系列使用那个 dataset。
        # dataset_index: types.Numeric = 0,
        #     # 是否裁剪超出坐标系部分的图形。柱状图:裁掉所有超出坐标系的部分,但是依然保留柱子的宽度
        # is_clip: bool = True,
        #     # 柱状图所有图形的 zlevel 值。
        # z_level: types.Numeric = 0,
        #     # 柱状图组件的所有图形的z值。控制图形的前后顺序。
        #     # z值小的图形会被z值大的图形覆盖。
        #     # z相比zlevel优先级更低,而且不会创建新的 Canvas。
        # z: types.Numeric = 2,
        #     # 标签配置项,参考 `series_options.LabelOpts`
        # label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
        #     # 标记点配置项,参考 `series_options.MarkPointOpts`
        # markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
        #     # 标记线配置项,参考 `series_options.MarkLineOpts`
        # markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
        #     # 图表标域,常用于标记图表中某个范围的数据,参考 `series_options.MarkAreaOpts`
        # markarea_opts: types.MarkArea = None,
        #     # 提示框组件配置项,参考 `series_options.TooltipOpts`
        # tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
        #     # 图元样式配置项,参考 `series_options.ItemStyleOpts`
        # itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
        #     # 高亮配置项,参考 `global_options.EmphasisOpts`
        # emphasis_opts: types.Emphasis = None,
        #     # 淡出时的图形样式和标签样式。开启 emphasis.focus 后有效。
        # blur_opts: types.Blur = None,
        #     # 数据选中时的图形样式和标签样式。开启 selectedMode 后有效。
        # select_opts: types.Select = None,
        #     # 可以定义 data 的哪个维度被编码成什么。
        # encode: types.Union[types.JSFunc, dict, None] = None,
    )
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            # 是否显示标题组件。
            is_show=True,
            # 主标题文本,支持使用 \n 换行。
            title="职位分类柱状图",
            # 主标题跳转 URL 链接
            title_link='https://www.baidu.com',
            # 主标题跳转链接方式,默认值是: blank
            # 可选参数: 'self', 'blank','self' 当前窗口打开; 'blank' 新窗口打开
            title_target=None,
            # 副标题文本,支持使用 \n 换行。
            subtitle="柱状图副标题",
            # 副标题跳转 URL 链接
            subtitle_link='https://www.baidu.com',
            # 副标题跳转链接方式,默认值是: blank
            # 可选参数: 'self', 'blank','self' 当前窗口打开; 'blank' 新窗口打开
            subtitle_target=None,
            # title 组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='10%',
            # title 组件离容器右侧的距离。
            # pos_right=None,
            # title 组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='10%',
            # title 组件离容器下侧的距离。
            # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
            # pos_bottom=None,
            # 标题内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。
            padding=5,
            # 主副标题之间的间距。
            item_gap=30,
            # 整体(包括 text 和 subtext)的水平对齐。
            # 可选值:'auto'、'left'、'right'、'center'。
            text_align="auto",
            # 整体(包括 text 和 subtext)的垂直对齐。
            # 可选值:'auto'、'left'、'right'、'center'。
            text_vertical_align="auto",
            # 是否触发事件。
            is_trigger_event=False,
            # 主标题字体样式配置项,参考 `series_options.TextStyleOpts`
            title_textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=20,
                font_weight="bold"
            ),
            # 副标题字体样式配置项,参考 `series_options.TextStyleOpts`
            subtitle_textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=16
            ),
        ),
        legend_opts=opts.LegendOpts(
            # 图例的类型。可选值:'plain':普通图例。缺省就是普通图例。
            # 'scroll':可滚动翻页的图例。当图例数量较多时可以使用。
            type_=None,
            # 图例选择的模式,控制是否可以通过点击图例改变系列的显示状态。默认开启图例选择,可以设成 false 关闭
            # 除此之外也可以设成 'single' 或者 'multiple' 使用单选或者多选模式。
            selected_mode=None,
            # 是否显示图例组件,默认显示
            is_show=True,
            # 图例组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='75%',
            # 图例组件离容器右侧的距离。
            # pos_right=None,
            # 图例组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='15%',
            # 图例组件离容器下侧的距离。
            # pos_bottom=None,
            # 图例列表的布局朝向。可选:'horizontal', 'vertical'
            orient='vertical',
            # 图例标记和文本的对齐。默认自动(auto)
            # 根据组件的位置和 orient 决定
            # 当组件的 left 值为 'right' 以及纵向布局(orient 为 'vertical')的时候为右对齐,即为 'right'。
            # 可选参数: `auto`, `left`, `right`
            align='left',
            # 图例内边距,单位px,默认各方向内边距为5
            padding=5,
            # 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。
            # 默认间隔为 10
            item_gap=15,
            # 图例标记的图形宽度。默认宽度为 25
            item_width=35,
            # 图例标记的图形高度。默认高度为 14
            item_height=20,
            # 图例关闭时的颜色。默认是 #ccc
            inactive_color=None,
            # 图例组件字体样式,参考 `series_options.TextStyleOpts`
            textstyle_opts=opts.TextStyleOpts(
                color="#ff6",
                font_size=14
            ),
            # 图例项的 icon。
            # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
            legend_icon=None,
            # 图例背景色,默认透明。
            background_color="transparent",
            # 图例的边框颜色。支持的颜色格式同 backgroundColor。
            border_color="#000",
            # 图例的边框线宽。
            border_width=1,
            # 图例的边框圆角半径,单位px,支持传入数组分别指定 4 个圆角半径。
            border_radius=5,
            # legend.type 为 'scroll' 时有效。图例控制块中,按钮和页信息之间的间隔。
            page_button_item_gap=5,
            # legend.type 为 'scroll' 时有效。图例控制块和图例项之间的间隔。
            page_button_gap=None,
            # legend.type 为 'scroll' 时有效。图例控制块的位置。可选值为:
            # 'start':控制块在左或上。
            # 'end':控制块在右或下。
            page_button_position="end",
            # legend.type 为 'scroll' 时有效。
            # 图例控制块中,页信息的显示格式。默认为 '{current}/{total}',其中 {current} 是当前页号(从 1 开始计数),{total} 是总页数。
            # 如果 pageFormatter 使用函数,须返回字符串,参数为:
            # {
            #     current: number
            #     total: number
            # }
            page_formatter="{current}/{total}",
            # legend.type 为 'scroll' 时有效。图例控制块的图标。
            page_icon=None,
            # legend.type 为 'scroll' 时有效。翻页按钮的颜色。
            page_icon_color="#2f4554",
            # legend.type 为 'scroll' 时有效。翻页按钮不激活时(即翻页到头时)的颜色。
            page_icon_inactive_color="#aaa",
            # legend.type 为 'scroll' 时有效。
            # 翻页按钮的大小。可以是数字,也可以是数组,如 [10, 3],表示 [宽,高]。
            page_icon_size=15,
            # 图例翻页是否使用动画。
            is_page_animation=None,
            # 图例翻页时的动画时长。
            page_animation_duration_update=800,
            # 图例组件中的选择器按钮,目前包括全选和反选两种功能。
            # 默认不显示,用户可手动开启,也可以手动配置每个按钮的标题。
            selector=False,
            # 选择器的位置,可以放在图例的尾部或者头部,对应的值分别为 'end' 和 'start'。
            # 默认情况下,图例横向布局的时候,选择器放在图例的尾部;图例纵向布局的时候,选择器放在图例的头部。
            selector_position="auto",
            # 选择器按钮之间的间隔。
            selector_item_gap=7,
            # 选择器按钮与图例组件之间的间隔。
            selector_button_gap=10,
        ),
        tooltip_opts=opts.TooltipOpts(
            # 是否显示提示框组件,包括提示框浮层和 axisPointer。
            is_show=True,
            # 触发类型。可选:
            # 'item': 数据项图形触发,主要在散点图,柱状图等无类目轴的图表中使用。
            # 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
            # 'none': 什么都不触发
            trigger="item",
            # 提示框触发的条件,可选:
            # 'mousemove': 鼠标移动时触发。
            # 'click': 鼠标点击时触发。
            # 'mousemove|click': 同时鼠标移动和点击时触发。
            # 'none': 不在 'mousemove' 或 'click' 时触发,
            trigger_on="mousemove|click",
            # 指示器类型。可选
            # 'line':直线指示器
            # 'shadow':阴影指示器
            # 'none':无指示器
            # 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
            axis_pointer_type="line",
            # 是否显示提示框浮层,默认显示。
            # 只需 tooltip 触发事件或显示 axisPointer 而不需要显示内容时可配置该项为 false。
            is_show_content=True,
            # 是否永远显示提示框内容,
            # 默认情况下在移出可触发提示框区域后一定时间后隐藏,设置为 true 可以保证一直显示提示框内容。
            is_always_show_content=False,
            # 浮层显示的延迟,单位为 ms,默认没有延迟,也不建议设置。
            show_delay=0,
            # 浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效。
            hide_delay=100,
            # 提示框浮层的位置,默认不设置时位置会跟随鼠标的位置。
            # 1、通过数组配置:
            # 绝对位置,相对于容器左侧 10px, 上侧 10 px ===> position: [10, 10]
            # 相对位置,放置在容器正中间 ===> position: ['50%', '50%']
            # 2、通过回调函数配置
            # 3、固定参数配置:'inside','top','left','right','bottom'
            position=None,
            # 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
            # 字符串模板 模板变量有:
            # {a}:系列名。
            # {b}:数据名。
            # {c}:数据值。
            # {@xxx}:数据中名为 'xxx' 的维度的值,如 {@product} 表示名为 'product'` 的维度的值。
            # {@[n]}:数据中维度 n 的值,如{@[3]}` 表示维度 3 的值,从 0 开始计数。
            # 示例:formatter: '{b}: {@score}'
            formatter="{a} <br/>{b}: {c} ({d}%)",
            # 提示框浮层的背景颜色。
            background_color='#ff68',
            # 提示框浮层的边框颜色。
            border_color=None,
            # 提示框浮层的边框宽。
            border_width=0,
            # 文字样式配置项,参考 `series_options.TextStyleOpts`
            textstyle_opts=opts.TextStyleOpts(
                color="#00f8",
                font_size=14
            ),
        ),
        toolbox_opts=opts.ToolboxOpts(
            # 是否显示工具栏组件
            is_show=True,
            # 工具栏 icon 的布局朝向。
            # 可选:'horizontal', 'vertical'
            orient="vertical",
            # 工具栏组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐
            pos_left="right",
            # 工具栏组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='top',
            # 各工具配置项,参考 `global_options.ToolBoxFeatureOpts`
            feature=opts.ToolBoxFeatureOpts(),
        ),
        brush_opts=opts.BrushOpts(),
        visualmap_opts=opts.VisualMapOpts(
            # 是否显示视觉映射配置
            is_show=True,
            # 映射过渡类型,可选,"color", "size"
            type_="color",
            # 指定 visualMapPiecewise 组件的最小值。
            min_=100,
            # 指定 visualMapPiecewise 组件的最大值。
            max_=8000,
            # 两端的文本,如['High', 'Low']。
            range_text=['High', 'Low'],
            # visualMap 图元以及其附属物(如文字标签)的透明度。
            # range_opacity=[0.1, 1],
            # 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
            orient="vertical",
            # visualMap 组件离容器左侧的距离。
            # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'left', 'center', 'right'。
            # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
            pos_left='10%',
            # visualMap 组件离容器上侧的距离。
            # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
            # 也可以是 'top', 'middle', 'bottom'。
            # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
            pos_top='bottom',
            # 指定取哪个系列的数据,默认取所有系列。
            # series_index=None,
            # 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
            is_calculable=True,
            # 是否为分段型
            # is_piecewise=True,
            # 是否反转 visualMap 组件
            is_inverse=False,
            # 数据展示的小数精度。
            # 连续型数据平均分段,精度根据数据自动适应。
            # 连续型数据自定义分段或离散数据根据类别分段模式,精度默认为0(没有小数)。
            precision=0,
            # 图形的宽度,即长条的宽度。
            # item_width=20,
            # 图形的高度,即长条的高度。
            # item_height=130,
            # visualMap 组件的背景色。
            # background_color: Optional[str] = None,
            # visualMap 组件的边框颜色。
            # border_color: Optional[str] = None,
            # visualMap 边框线宽,单位px。
            # border_width: int = 0,
            # 文字样式配置项,参考 `series_options.TextStyleOpts`
            # textstyle_opts: Union[TextStyleOpts, dict, None] = None,
        ),
        xaxis_opts=opts.AxisOpts(
            # 坐标轴类型。可选:
            # 'value': 数值轴,适用于连续数据。
            # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
            # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
            # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
            # 'log' 对数轴。适用于对数数据。
            type_='category',
            # 坐标轴名称。
            name='职位分类',
            # 是否显示 x 轴。
            is_show=True,
            # 只在数值轴中(type: 'value')有效。
            # 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
            # 在设置 min 和 max 之后该配置项无效。
            is_scale=False,
            # 是否反向坐标轴。
            is_inverse=False,
            # 坐标轴名称显示位置。可选:
            # 'start', 'middle' 或者 'center','end'
            name_location="middle",
            # 坐标轴名称与轴线之间的距离。
            name_gap=30,
            # 坐标轴名字旋转,角度值。
            name_rotate=30,
            # 强制设置坐标轴分割间隔。
            # 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,
            # 这时候可以使用 interval 配合 min、max 强制设定刻度划分,一般不建议使用。
            # 无法在类目轴中使用。在时间轴(type: 'time')中需要传时间戳,在对数轴(type: 'log')中需要传指数值。
            interval=None,
            # x 轴所在的 grid 的索引,默认位于第一个 grid。
            grid_index=0,
            # x 轴的位置。可选:
            # 'top', 'bottom'
            # 默认 grid 中的第一个 x 轴在 grid 的下方('bottom'),第二个 x 轴视第一个 x 轴的位置放在另一侧。
            position=None,
            # Y 轴相对于默认位置的偏移,在相同的 position 上有多个 Y 轴的时候有用。
            offset=0,
            # 坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整。
            # 默认值是 5
            split_number=5,
            # 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。
            # 类目轴中 boundaryGap 可以配置为 true 和 false。默认为 true,这时候刻度只是作为分隔线,
            # 标签和数据点都会在两个刻度之间的带(band)中间。
            # 非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
            # 可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: ['20%', '20%']
            boundary_gap=None,
            # 坐标轴刻度最小值。
            # 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
            # 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            min_=None,
            # 坐标轴刻度最大值。
            # 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
            # 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            max_=None,
            # 自动计算的坐标轴最小间隔大小。
            # 例如可以设置成1保证坐标轴分割刻度显示成整数。
            # 默认值是 0
            min_interval=0,
            # 自动计算的坐标轴最大间隔大小。
            # 例如,在时间轴((type: 'time'))可以设置成 3600 * 24 * 1000 保证坐标轴分割刻度最大为一天。
            max_interval=None,
            # 坐标轴刻度线配置项,参考 `global_options.AxisLineOpts`
            axisline_opts=opts.AxisLineOpts(
                # 是否显示坐标轴轴线。
                is_show=True,
                # X 轴或者 Y 轴的轴线是否在另一个轴的 0 刻度上,只有在另一个轴为数值轴且包含 0 刻度时有效。
                is_on_zero=True,
                # 当有双轴时,可以用这个属性手动指定,在哪个轴的 0 刻度上。
                on_zero_axis_index=0,
                # 轴线两边的箭头。可以是字符串,表示两端使用同样的箭头;或者长度为 2 的字符串数组,分别表示两端的箭头。
                # 默认不显示箭头,即 'none'。
                # 两端都显示箭头可以设置为 'arrow'。
                # 只在末端显示箭头可以设置为 ['none', 'arrow']。
                symbol=['none', 'arrow'],
                # 坐标轴线风格配置项,参考 `series_options.LineStyleOpts`
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=1,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=1,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                ),
            ),
            # 坐标轴刻度配置项,参考 `global_options.AxisTickOpts`
            axistick_opts=opts.AxisTickOpts(
                # 是否显示坐标轴刻度。
                is_show=True,
                # 刻度线和标签对齐(类目轴中在 boundaryGap 为 true 的时候有效)。
                is_align_with_label=True,
                # 坐标轴刻度是否朝内,默认朝外。
                is_inside=False,
                # 坐标轴刻度的长度。
                length=10,
                # 坐标轴线风格配置项,参考 `series_optionsLineStyleOpts`
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=15,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=1,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                ),
            ),
            # 坐标轴标签配置项,参考 `series_options.LabelOpts`
            axislabel_opts=opts.LabelOpts(
                # 是否显示标签。
                is_show=True,
                # 文字的颜色。
                # 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
                color='#000',
                # 文字的字体大小
                font_size=12,
                # 文字字体的风格,可选:
                # 'normal','italic','oblique'
                font_style='normal',
                # 文字字体的粗细,可选:
                # 'normal','bold','bolder','lighter'
                font_weight=None,
                # 文字的字体系列
                # 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
                font_family=None,
                # 标签旋转。从 -90 度到 90 度。正值是逆时针。
                rotate=45,
                # 刻度标签与轴线之间的距离。
                margin=25,
                # 文字水平对齐方式,默认自动。可选:
                # 'left','center','right'
                horizontal_align='center',
                # 文字垂直对齐方式,默认自动。可选:
                # 'top','middle','bottom'
                vertical_align='middle',
            ),
            # 坐标轴指示器配置项,参考 `global_options.AxisPointerOpts`
            axispointer_opts=opts.AxisPointerOpts(
                # 默认显示坐标轴指示器
                is_show=True,
                # 不同轴的 axisPointer 可以进行联动,在这里设置。联动表示轴能同步一起活动。
                # 轴依据他们的 axisPointer 当前对应的值来联动。
                # link 是一个数组,其中每一项表示一个 link group,一个 group 中的坐标轴互相联动。
                # 具体使用方式可以参见:https://www.echartsjs.com/option.html#axisPointer.link
                link=None,
                # 指示器类型。
                # 可选参数如下,默认为 'line'
                # 'line' 直线指示器
                # 'shadow' 阴影指示器
                # 'none' 无指示器
                type_="line",
                # 坐标轴指示器的文本标签,坐标轴标签配置项,参考 `series_options.LabelOpts`
                label=None,
                # 坐标轴线风格配置项,参考 `series_optionsLineStyleOpts`
                linestyle_opts=None,
            ),
            # 坐标轴名称的文字样式,参考 `series_options.TextStyleOpts`
            name_textstyle_opts=opts.TextStyleOpts(
                # 文字颜色。
                color='#00f8',
                # 文字字体的风格
                # 可选:'normal','italic','oblique'
                font_style='normal',
                # 主标题文字字体的粗细,可选:
                # 'normal','bold','bolder','lighter'
                font_weight='bold',
                # 文字的字体系列
                # 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
                font_family=None,
                # 文字的字体大小
                font_size=16,
                # 文字水平对齐方式,默认自动
                align=None,
                # 文字垂直对齐方式,默认自动
                vertical_align=None,
                # 行高
                line_height=None,
                # 文字块背景色。可以是直接的颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'
                background_color='#0f08',
                # 文字块边框颜色
                border_color=None,
                # 文字块边框宽度
                border_width=None,
                # 文字块的圆角
                border_radius=None,
                # 文字块的内边距
                padding=None,
                # 文字块的背景阴影颜色
                shadow_color=None,
                # 文字块的背景阴影长度
                shadow_blur=None,
                # 文字块的宽度
                width=None,
                # 文字块的高度
                height=None,
            ),
            # 分割区域配置项,参考 `series_options.SplitAreaOpts`
            splitarea_opts=opts.SplitAreaOpts(
                # 是否显示分隔区域。
                is_show=True,
                # 分隔区域的样式配置项,参考 `series_options.AreaStyleOpts`
                areastyle_opts=opts.AreaStyleOpts(
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=0.5,
                    # 填充的颜色。
                    color='#00f8'
                )
            ),
            # 分割线配置项,参考 `series_options.SplitLineOpts`
            splitline_opts=opts.SplitLineOpts(
                # 是否显示分割线
                is_show=True,
                # 线风格配置项,参考 `series_options.SplitLineOpts`
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=15,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=0.6,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                    color='yellow'
                ),
            ),
            # 坐标轴次刻度线相关设置,参考 `series_options.MinorTickOpts`
            minor_tick_opts=opts.MinorTickOpts(
                # 是否显示次刻度线。
                is_show=True,
                # 次刻度线分割数,默认会分割成 5 段
                split_number=5,
                # 次刻度线的长度。
                length=3,
                # 次刻度线的样式
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=15,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=0.6,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                    color='yellow'
                ),
            ),
            # 坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick,参考 `series_options.MinorSplitLineOpts`
            minor_split_line_opts=opts.MinorSplitLineOpts(
                # 是否显示次分隔线。默认不显示。
                is_show=True,
                # 次分隔线线宽。
                width=1,
                # 次分隔线线的类型。可选:'solid','dashed','dotted'
                type_="solid",
                # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                opacity=0.5,
                # 线的样式
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=15,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=0.6,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                    color='yellow'
                ),
            ),
            #     # 动画配置项,参考 `global_options.AnimationOpts`
            # animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
        ),
        yaxis_opts=opts.AxisOpts(
            # 坐标轴类型。可选:
            # 'value': 数值轴,适用于连续数据。
            # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
            # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
            # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
            # 'log' 对数轴。适用于对数数据。
            type_='value',
            # 坐标轴名称。
            name='职位数量',
            # 是否显示 y 轴。
            is_show=True,
            # 只在数值轴中(type: 'value')有效。
            # 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
            # 在设置 min 和 max 之后该配置项无效。
            is_scale=False,
            # 是否反向坐标轴。
            is_inverse=False,
            # 坐标轴名称显示位置。可选:
            # 'start', 'middle' 或者 'center','end'
            name_location="middle",
            # 坐标轴名称与轴线之间的距离。
            name_gap=45,
            # 坐标轴名字旋转,角度值。
            name_rotate=None,
            # 强制设置坐标轴分割间隔。
            # 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,
            # 这时候可以使用 interval 配合 min、max 强制设定刻度划分,一般不建议使用。
            # 无法在类目轴中使用。在时间轴(type: 'time')中需要传时间戳,在对数轴(type: 'log')中需要传指数值。
            interval=500,
            # x 轴所在的 grid 的索引,默认位于第一个 grid。
            grid_index=0,
            # x 轴的位置。可选:
            # 'top', 'bottom'
            # 默认 grid 中的第一个 x 轴在 grid 的下方('bottom'),第二个 x 轴视第一个 x 轴的位置放在另一侧。
            position=None,
            # Y 轴相对于默认位置的偏移,在相同的 position 上有多个 Y 轴的时候有用。
            offset=0,
            # 坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整。
            # 默认值是 5
            split_number=5,
            # 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。
            # 类目轴中 boundaryGap 可以配置为 true 和 false。默认为 true,这时候刻度只是作为分隔线,
            # 标签和数据点都会在两个刻度之间的带(band)中间。
            # 非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
            # 可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: ['20%', '20%']
            boundary_gap=None,
            # 坐标轴刻度最小值。
            # 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
            # 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            min_=None,
            # 坐标轴刻度最大值。
            # 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
            # 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            max_=None,
            # 自动计算的坐标轴最小间隔大小。
            # 例如可以设置成1保证坐标轴分割刻度显示成整数。
            # 默认值是 0
            min_interval=0,
            # 自动计算的坐标轴最大间隔大小。
            # 例如,在时间轴((type: 'time'))可以设置成 3600 * 24 * 1000 保证坐标轴分割刻度最大为一天。
            max_interval=None,
            #     # 坐标轴刻度线配置项,参考 `global_options.AxisLineOpts`
            # axisline_opts: Union[AxisLineOpts, dict, None] = None,
            #     # 坐标轴刻度配置项,参考 `global_options.AxisTickOpts`
            # axistick_opts: Union[AxisTickOpts, dict, None] = None,
            # 坐标轴标签配置项,参考 `series_options.LabelOpts`
            axislabel_opts=opts.LabelOpts(
                formatter="{value}个",
            ),
            #     # 坐标轴指示器配置项,参考 `global_options.AxisPointerOpts`
            # axispointer_opts: Union[AxisPointerOpts, dict, None] = None,
            #     # 坐标轴名称的文字样式,参考 `series_options.TextStyleOpts`
            # name_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
            #     # 分割区域配置项,参考 `series_options.SplitAreaOpts`
            # splitarea_opts: Union[SplitAreaOpts, dict, None] = None,
            # 分割线配置项,参考 `series_options.SplitLineOpts`
            # 分割线配置项,参考 `series_options.SplitLineOpts`
            splitline_opts=opts.SplitLineOpts(
                # 是否显示分割线
                is_show=True,
                # 线风格配置项,参考 `series_options.SplitLineOpts`
                linestyle_opts=opts.LineStyleOpts(
                    # 是否显示
                    is_show=True,
                    # 线宽。
                    width=15,
                    # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                    opacity=0.6,
                    # 线的类型。可选:
                    # 'solid', 'dashed', 'dotted'
                    type_="solid",
                    color='yellow'
                ),
            ),
            #     # 坐标轴次刻度线相关设置,参考 `series_options.MinorTickOpts`
            # minor_tick_opts: Union[MinorTickOpts, dict, None] = None,
            #     # 坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick,参考 `series_options.MinorSplitLineOpts`
            # minor_split_line_opts: Union[MinorSplitLineOpts, dict, None] = None,
            #     # 动画配置项,参考 `global_options.AnimationOpts`
            # animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
        ),
        datazoom_opts=[
            opts.DataZoomOpts(type_="slider"),
            opts.DataZoomOpts(type_="inside"),
        ],
        # datazoom_opts=opts.DataZoomOpts(  # 是否显示 组件。如果设置为 false,不会显示,但是数据过滤的功能还存在。
        #     is_show=True,
        #     # 组件类型,可选 "slider", "inside"
        #     type_="slider",
        #     # 是否停止组件的功能。
        #     is_disabled=False,
        #     # 拖动时,是否实时更新系列的视图。如果设置为 false,则只在拖拽结束的时候更新。
        #     is_realtime=True,
        #     # 数据窗口范围的起始百分比。范围是:0 ~ 100。表示 0% ~ 100%。
        #     range_start=20,
        #     # 数据窗口范围的结束百分比。范围是:0 ~ 100
        #     range_end=80,
        #     # 数据窗口范围的起始数值。如果设置了 start 则 startValue 失效。
        #     start_value=None,
        #     # 数据窗口范围的结束数值。如果设置了 end 则 endValue 失效。
        #     end_value=None,
        #     # 用于限制窗口大小的最小值(百分比值),取值范围是 0 ~ 100。
        #     # 如果设置了 dataZoom-inside.minValueSpan 则 minSpan 失效。
        #     min_span=None,
        #     # 用于限制窗口大小的最大值(百分比值),取值范围是 0 ~ 100。
        #     # 如果设置了 dataZoom-inside.maxValueSpan 则 maxSpan 失效。
        #     max_span=None,
        #     # 用于限制窗口大小的最小值(实际数值)。
        #     # 如在时间轴上可以设置为:3600 * 24 * 1000 * 5 表示 5 天。 在类目轴上可以设置为 5 表示 5 个类目。
        #     min_value_span=None,
        #     # 用于限制窗口大小的最大值(实际数值)。
        #     # 如在时间轴上可以设置为:3600 * 24 * 1000 * 5 表示 5 天。 在类目轴上可以设置为 5 表示 5 个类目。
        #     max_value_span=None,
        #     # 布局方式是横还是竖。不仅是布局方式,对于直角坐标系而言,也决定了,缺省情况控制横向数轴还是纵向数轴
        #     # 可选值为:'horizontal', 'vertical'
        #     orient="vertical",
        #     # 设置 dataZoom-inside 组件控制的 x 轴(即 xAxis,是直角坐标系中的概念,参见 grid)。
        #     # 不指定时,当 dataZoom-inside.orient 为 'horizontal'时,默认控制和 dataZoom 平行的第一个 xAxis
        #     # 如果是 number 表示控制一个轴,如果是 Array 表示控制多个轴。
        #     xaxis_index=None,
        #     # 设置 dataZoom-inside 组件控制的 y 轴(即 yAxis,是直角坐标系中的概念,参见 grid)。
        #     # 不指定时,当 dataZoom-inside.orient 为 'horizontal'时,默认控制和 dataZoom 平行的第一个 yAxis
        #     # 如果是 number 表示控制一个轴,如果是 Array 表示控制多个轴。
        #     yaxis_index=None,
        #     # 设置 dataZoom-inside 组件控制的 radius 轴(即radiusAxis,是直角坐标系中的概念,参见 polar)。
        #     # 如果是 number 表示控制一个轴,如果是 Array 表示控制多个轴。
        #     radius_axis_index=None,
        #     # 设置 dataZoom-inside 组件控制的 angle 轴(即angleAxis,是直角坐标系中的概念,参见 polar)。
        #     # 如果是 number 表示控制一个轴,如果是 Array 表示控制多个轴。
        #     angle_axis_index=None,
        #     # 是否锁定选择区域(或叫做数据窗口)的大小。
        #     # 如果设置为 true 则锁定选择区域的大小,也就是说,只能平移,不能缩放。
        #     is_zoom_lock=False,
        #     # 设置触发视图刷新的频率。单位为毫秒(ms)。
        #     # 如果 animation 设为 true 且 animationDurationUpdate 大于 0,可以保持 throttle 为默认值 100(或者设置为大于 0 的值),否则拖拽时有可能画面感觉卡顿。
        #     # 如果 animation 设为 false 或者 animationDurationUpdate 设为 0,且在数据量不大时,拖拽时画面感觉卡顿,可以把尝试把 throttle 设为 0 来改善。
        #     throttle=None,
        #     # 形式为:[rangeModeForStart, rangeModeForEnd]。
        #     # 例如 rangeMode: ['value', 'percent'],表示 start 值取绝对数值,end 取百分比。
        #     # 每项可选值为:'value', 'percent'
        #     range_mode=None,
        #     # dataZoom-slider 组件离容器左侧的距离。
        #     # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
        #     # 也可以是 'left', 'center', 'right'。
        #     # 如果 left 的值为 'left', 'center', 'right',组件会根据相应的位置自动对齐。
        #     pos_left='0',
        #     # dataZoom-slider 组件离容器上侧的距离。
        #     # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
        #     # 也可以是 'top', 'middle', 'bottom'。
        #     # 如果 top 的值为 'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
        #     pos_top='0',
        #     # dataZoom-slider 组件离容器右侧的距离。
        #     # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
        #     # 默认自适应。
        #     pos_right=None,
        #     # dataZoom-slider组件离容器下侧的距离。
        #     # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
        #     # 默认自适应。
        #     pos_bottom=None,
        #     # dataZoom 的运行原理是通过数据过滤以及在内部设置轴的显示窗口来达到数据窗口缩放的效果。
        #     # 'filter':当前数据窗口外的数据,被过滤掉。即会影响其他轴的数据范围。
        #     #  每个数据项,只要有一个维度在数据窗口外,整个数据项就会被过滤掉。
        #     # 'weakFilter':当前数据窗口外的数据,被过滤掉。即会影响其他轴的数据范围。
        #     #  每个数据项,只有当全部维度都在数据窗口同侧外部,整个数据项才会被过滤掉。
        #     # 'empty':当前数据窗口外的数据,被设置为空。即不会影响其他轴的数据范围。
        #     # 'none': 不过滤数据,只改变数轴范围。
        #     filter_mode="filter",
        #     # 如何触发缩放。可选值为:
        #     # true:表示不按任何功能键,鼠标滚轮能触发缩放。
        #     # false:表示鼠标滚轮不能触发缩放。
        #     # 'shift':表示按住 shift 和鼠标滚轮能触发缩放。
        #     # 'ctrl':表示按住 ctrl 和鼠标滚轮能触发缩放。
        #     # 'alt':表示按住 alt 和鼠标滚轮能触发缩放。
        #     is_zoom_on_mouse_wheel=True,
        #     # 如何触发数据窗口平移。可选值为:
        #     # true:表示不按任何功能键,鼠标移动能触发数据窗口平移。
        #     # false:表示鼠标移动不能触发平移。
        #     # 'shift':表示按住 shift 和鼠标移动能触发数据窗口平移。
        #     # 'ctrl':表示按住 ctrl 和鼠标移动能触发数据窗口平移。
        #     # 'alt':表示按住 alt 和鼠标移动能触发数据窗口平移。
        #     is_move_on_mouse_move=True,
        #     # 如何触发数据窗口平移。可选值为:
        #     # true:表示不按任何功能键,鼠标滚轮能触发数据窗口平移。
        #     # false:表示鼠标滚轮不能触发平移。
        #     # 'shift':表示按住 shift 和鼠标滚轮能触发数据窗口平移。
        #     # 'ctrl':表示按住 ctrl 和鼠标滚轮能触发数据窗口平移。
        #     # 'alt':表示按住 alt 和鼠标滚轮能触发数据窗口平移。
        #     is_move_on_mouse_wheel=True,
        #     # 是否阻止 mousemove 事件的默认行为。
        #     is_prevent_default_mouse_move=True,
        # ),
    )
    bar.set_series_opts(
        # 设置标签位置
        # {a}:系列名称(如 add_yaxis 中的第一个参数)。
        # {b}:数据项名称(如 add_xaxis 中的值)。
        # {c}:数据项值(如 add_yaxis 中的具体数值)。
        # {d}:百分比(仅在柱状图、漏斗图等支持百分比的图表中有效)。
        label_opts=opts.LabelOpts(
            # 是否显示标签。
            is_show=True,
            # 标签的位置。可选
            # 'top','left','right','bottom','inside','insideLeft','insideRight'
            # 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
            # 'insideTopRight','insideBottomRight'
            # position="top",
            # 文字的颜色。
            # 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
            color='#0009',
            # 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
            # distance=None,
            # 文字的字体大小
            font_size=12,
            # 文字字体的风格,可选:
            # 'normal','italic','oblique'
            font_style='normal',
            # 文字字体的粗细,可选:
            # 'normal','bold','bolder','lighter'
            font_weight=None,
            # 文字的字体系列
            # 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
            font_family=None,
            # 标签旋转。从 -90 度到 90 度。正值是逆时针。
            rotate=30,
            # 刻度标签与轴线之间的距离。
            margin=8,
            # 坐标轴刻度标签的显示间隔,在类目轴中有效。
            # 默认会采用标签不重叠的策略间隔显示标签。
            # 可以设置成 0 强制显示所有标签。
            # 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
            # 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
            # (index:number, value: string) => boolean
            # 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。
            interval=None,
            # 文字水平对齐方式,默认自动。可选:
            # 'left','center','right'
            horizontal_align=None,
            # 文字垂直对齐方式,默认自动。可选:
            # 'top','middle','bottom'
            vertical_align=None,
            # 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
            # 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
            # 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
            # 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:

            # 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
            # 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
            # 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
            # 柱状图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
            # 示例:formatter: '{b}: {@score}'
            formatter="{b}:{c}",
            #     # 文字块背景色。
            #     # 可以使用颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'。
            # background_color: Optional[str] = None,
            #     # 文字块边框颜色。如果设置为 'inherit',则为视觉映射得到的颜色,如系列色。
            # border_color: Optional[str] = None,
            #     # 文字块边框宽度。
            # border_width: Optional[Numeric] = None,
            #     # 文字块的圆角。
            # border_radius: Optional[Numeric] = None,
            #     # 文字块的内边距。例如:
            #     # padding: [3, 4, 5, 6]:表示 [上, 右, 下, 左] 的边距。
            #     # padding: 4:表示 padding: [4, 4, 4, 4]。
            #     # padding: [3, 4]:表示 padding: [3, 4, 3, 4]。
            #     # 注意,文字块的 width 和 height 指定的是内容高宽,不包含 padding。
            # padding: Union[Numeric, Sequence[Numeric], None] = None,
            #     # 文本显示宽度。
            # text_width: Optional[Numeric] = None,
            #     # 文本显示高度。
            # text_height: Optional[Numeric] = None,
            #     # 文字本身的描边颜色。
            #     # 如果设置为 'inherit',则为视觉映射得到的颜色,如系列色。
            # text_border_color: Optional[str] = None,
            #     # 文字本身的描边宽度。
            # text_border_width: Optional[Numeric] = None,
            #     # 文字本身的阴影颜色。
            # text_shadow_color: Optional[str] = None,
            #     # 文字本身的阴影长度。
            # text_shadow_blur: Optional[Numeric] = None,
            #     # 文字本身的阴影 X 偏移。
            # text_shadow_offset_x: Optional[Numeric] = None,
            #     # 文字本身的阴影 Y 偏移。
            # text_shadow_offset_y: Optional[Numeric] = None,
            #     # 文字超出宽度是否截断或者换行。配置width时有效
            #     # 'truncate' 截断,并在末尾显示ellipsis配置的文本,默认为...
            #     # 'break' 换行
            #     # 'breakAll' 换行,跟'break'不同的是,在英语等拉丁文中,'breakAll'还会强制单词内换行
            # overflow: Optional[str] = None,
            #     # 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
            #     # 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
            # rich: Optional[dict] = None,
            #     # 是否开启数值动画,默认关闭
            # is_value_animation: bool = False,
        ),
        areastyle_opts=opts.AreaStyleOpts(
            # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
            opacity=0.5,
            # 填充的颜色。
            color='#00f'
        ),
        itemstyle_opts=opts.ItemStyleOpts(
            # 图形的颜色。
            color="blue",
            # 阴线 图形的颜色。
            color0="blue",
            # 图形的描边颜色。支持的颜色格式同 color,不支持回调函数。
            border_color="blue",
            # 阴线 图形的描边颜色。
            border_color0="red",
            # 描边宽度,默认不描边。
            border_width=5,
            # 描边边框线条类型,支持 'dashed', 'dotted'。
            border_type=None,
            # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
            opacity=1,
            # 区域的颜色。
            area_color='yellow',
        ),
        markpoint_opts=opts.MarkPointOpts(
            # 标记点数据,参考 `series_options.MarkPointItem`
            data=[
                opts.MarkPointItem(
                    # 标注名称。
                    name='最大值',
                    # 特殊的标注类型,用于标注最大值最小值等。可选:
                    # 'min' 最大值。'max' 最大值。'average' 平均值。
                    type_='max',
                    # 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值,可以是
                    # 0(xAxis, radiusAxis),1(yAxis, angleAxis),默认使用第一个数值轴所在的维度。
                    value_index=1,
                    # 标记的图形。
                    # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
                    # 'diamond', 'pin', 'arrow', 'none'
                    # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
                    symbol=None,
                    # 标记点样式配置项,参考 `series_options.ItemStyleOpts`
                    itemstyle_opts=opts.ItemStyleOpts(
                        # 图形的颜色。
                        color="#06f8",
                        # 图形的描边颜色。支持的颜色格式同 color,不支持回调函数。
                        border_color="#f608",
                        # 描边宽度,默认不描边。
                        border_width=5,
                        # 描边边框线条类型,支持 'dashed', 'dotted'。
                        border_type=None,
                        # 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
                        opacity=0.8,
                    ),
                    # 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值。这可以是维度的直接名称,
                    # 例如折线图时可以是 x、angle 等、candlestick 图时可以是 open、close 等维度名称。
                    value_dim=None,
                    # 标注的坐标。坐标格式视系列的坐标系而定,可以是直角坐标系上的 x, y,
                    # 也可以是极坐标系上的 radius, angle。例如 [121, 2323]、['aa', 998]。
                    coord=None,
                    # 相对容器的屏幕 x 坐标,单位像素。
                    x=None,
                    # 相对容器的屏幕 y 坐标,单位像素。
                    y=None,
                    # 标注值,可以不设。
                    value=None,
                    # 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
                    # 例如 [20, 10] 表示标记宽为 20,高为 10。
                    symbol_size=None,
                ),
            ],
            # 标记的图形。
            # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
            # 'diamond', 'pin', 'arrow', 'none'
            # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
            symbol=None,
            # 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
            # 例如 [20, 10] 表示标记宽为 20,高为 10。
            # 如果需要每个数据的图形大小不一样,可以设置为如下格式的回调函数:
            # (value: Array|number, params: Object) => number|Array
            # 其中第一个参数 value 为 data 中的数据值。第二个参数 params 是其它的数据项参数。
            symbol_size=None,
            # 标签配置项,参考 `series_options.LabelOpts`
            label_opts=opts.LabelOpts(position="inside", color="#fff"),
            # 动画配置项,参考 `global_options.AnimationOpts`
            animation_opts=None,
        ),
    )
    bar.render(html_file_path)


if __name__ == '__main__':
    bar_chart(load_data("./job_category.csv"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMagician

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值