• Pyecharts绘图教程(2)—— 绘制多种折线图(Line)参数说明+代码实战


    大家好,我是 👉【Python当打之年(点击跳转)】

    🔥🔥🔥 本期是《Pyecharts绘图教程》的第 2 该系列从0到1不断进阶深入,专门 针对零基础和需要进阶提升的小伙伴,逐步掌握使用Pyecharts库进行数据可视化的技能 ,希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

    🎯 1 简介

    折线图是一种常用的可视化图表,可以清晰地展示数据随时间或其他连续变量的变化趋势 ,通过连接数据点,可以观察到数据的上升、下降、波动等变化趋势,帮助人们更直观地理解数据的变化规律。

    🎯 2 图表配置项

    2.1 导入模块

    from pyecharts.charts import Line
    import pyecharts.options as opts
    
    • 1
    • 2

    2.2 数据配置项

    通过add_xaxisadd_yaxis函数添加横坐标、纵坐标数据

    def add_xaxis(
    	# 系列数据
    	xaxis_data: types.Sequence[types.Union[opts.LineItem, dict]]
    )
    
    • 1
    • 2
    • 3
    • 4
    def add_yaxis(
        # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        series_name: str,
    
        # 系列数据
        y_axis: types.Sequence[types.Union[opts.LineItem, dict]],
    
        # 是否选中图例
        is_selected: bool = True,
    
        # 是否连接空数据,空数据使用 `None` 填充
        is_connect_nones: bool = False,
    
        # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
        xaxis_index: Optional[Numeric] = None,
    
        # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
        yaxis_index: Optional[Numeric] = None,
    
        # 系列 label 颜色
        color: Optional[str] = None,
    
        # 是否显示 symbol, 如果 false 则只有在 tooltip hover 的时候显示。
        is_symbol_show: bool = True,
    
        # 标记的图形。
        # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 
        # 'diamond', 'pin', 'arrow', 'none'
        # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
        symbol: Optional[str] = None,
    
        # 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
        # 例如 [20, 10] 表示标记宽为 20,高为 10。
        symbol_size: Union[Numeric, Sequence] = 4,
    
        # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
        stack: Optional[str] = None,
    
        # 是否平滑曲线
        is_smooth: bool = False,
    
        # 是否裁剪超出坐标系部分的图形。折线图:裁掉所有超出坐标系的折线部分,拐点图形的逻辑按照散点图处理
        is_clip: bool = True,
    
        # 是否显示成阶梯图
        is_step: bool = False,
    
        # 是否开启 hover 在拐点标志上的提示动画效果。
        is_hover_animation: bool = True,
    
        # 折线图所有图形的 zlevel 值。
        # zlevel用于 Canvas 分层,不同zlevel值的图形会放置在不同的 Canvas 中,Canvas 分层是一种常见的优化手段。
        # zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。
        z_level: types.Numeric = 0,
    
        # 折线图组件的所有图形的z值。控制图形的前后顺序。z值小的图形会被z值大的图形覆盖。
        # z 相比 zlevel 优先级更低,而且不会创建新的 Canvas。
        z: types.Numeric = 0,
    
        # 折线图在数据量远大于像素点时候的降采样策略,开启后可以有效的优化图表的绘制效率,默认关闭,也就是全部绘制不过滤数据点。
        # 可选:
        # 'lttb' 采用 Largest-Triangle-Three-Bucket 算法,可以最大程度保证采样后线条的趋势,形状和极值。
        # 'average' 取过滤点的平均值
        # 'max' 取过滤点的最大值
        # 'min' 取过滤点的最小值
        # 'sum' 取过滤点的和
        sampling: 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_options.MarkPointOpts`
        markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
    
        # 标记线配置项,参考 `series_options.MarkLineOpts`
        markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
    
        # 提示框组件配置项,参考 `series_options.TooltipOpts`
        tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
    
        # 标签配置项,参考 `series_options.LabelOpts`
        label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
    
        # 线样式配置项,参考 `series_options.LineStyleOpts`
        linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
    
        # 填充区域配置项,参考 `series_options.AreaStyleOpts`
        areastyle_opts: Union[opts.AreaStyleOpts, dict] = opts.AreaStyleOpts(),
    
        # 图元样式配置项,参考 `series_options.ItemStyleOpts`
        itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
    
        # 可以定义 data 的哪个维度被编码成什么。
        encode: types.Union[types.JSFunc, dict, None] = None,
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103

    2.3 全局配置项

    通过set_global_opts 函数设置全局样式,包含标题、图例、工具、视觉、图形组件 、坐标轴配置等等,这个目前了解即可,后期会有专门的章节详细介绍每一项的配置:

    def set_global_opts(
        title_opts: types.Title = opts.TitleOpts(),
        legend_opts: types.Legend = opts.LegendOpts(),
        tooltip_opts: types.Tooltip = None,
        toolbox_opts: types.Toolbox = None,
        brush_opts: types.Brush = None,
        xaxis_opts: types.Axis = None,
        yaxis_opts: types.Axis = None,
        visualmap_opts: types.VisualMap = None,
        datazoom_opts: types.DataZoom = None,
        graphic_opts: types.Graphic = None,
        axispointer_opts: types.AxisPointer = None,
        ):
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🎯 3 代码实战

    3.1 基础折线

    x_data = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
    y_data1 = [120, 132, 101, 134, 90, 200, 180]
    y_data2 = [i/2 for i in y_data1]
    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1)
        .add_yaxis("利润", y_data2)
        .set_global_opts(title_opts=opts.TitleOpts(title="示例1"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    3.2 平滑曲线(is_smooth)

    is_smooth 参数设置是否平滑显示:

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, is_smooth=True)
        .add_yaxis("利润", y_data2)
        .set_global_opts(title_opts=opts.TitleOpts(title="示例2"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    3.3 阶梯折线(is_step)

    is_step 参数设置是否阶梯显示:

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data, is_step=True)
        .add_yaxis("利润", y_data2)
        .set_global_opts(title_opts=opts.TitleOpts(title="示例3"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    3.4 空值过渡(is_connect_nones)

    is_connect_nones 参数设置是否连接空数据,空数据使用 None 填充:

    y_data = [120, None, 101, 134, 90,None,180]
    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data, is_connect_nones=True)
        .add_yaxis("利润", y_data2)
        .set_global_opts(title_opts=opts.TitleOpts(title="示例4"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    3.5 线条颜色(color)

    color 参数设置线条颜色:

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue')
        .add_yaxis("利润", y_data2, color='green')
        .set_global_opts(title_opts=opts.TitleOpts(title="示例5"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    注意!注意!注意!

    颜色设置这里有一个经常出错的地方:代码里销量折线 color=‘blue’,利润折线 color=‘green’,但是图上两个颜色是相反的,为什么?小伙伴们可以思考一下,正常要求图像应该是下面这样的:

    在这里插入图片描述

    3.6 标记点配置项(markpoint_opts)

    markpoint_opts 参数设置特殊标注点,type_ 取值: min 最大值、max 最大值、average 平均值。

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',
                   markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
                  )
        .add_yaxis("利润", y_data2, color='green',
                   markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
                  )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例6"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    3.7 标记的图形(symbol)

    symbol 参数设置标记图形,echarts 提供的标记类型包括 :circle、rect、roundRect、triangle、diamond、pin、arrow、none,也可以通过 image://url 设置为图片,其中 URL 为图片的链接,或者 dataURI。

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',symbol="diamond", symbol_size=20,
                  )
        .add_yaxis("利润", y_data2, color='green',symbol="triangle", symbol_size=20,
                  )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例7"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    3.8 标记线配置项(markline_opts)

    markline_opts 参数设置特殊标注线,type_ 取值: min 最大值、max 最大值、average 平均值。

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',symbol="diamond", symbol_size=20,
                   markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
                  )
        .add_yaxis("利润", y_data2, color='green',symbol="triangle", symbol_size=20,
                   markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="min")]),
                  )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例8"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    3.9 线样式配置项(linestyle_opts)

    linestyle_opts 参数设置线条样式,width 线宽;opacity 图形透明度,支持从 0 到 1 的数字,为 0 时不绘制该图形;curve 线的弯曲度,0 表示完全不弯曲;type_ 线的类型,可选:solid、dashed、dotted

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',symbol="diamond", symbol_size=20,
                   markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
                   linestyle_opts=opts.LineStyleOpts(color="green", width=2, type_="dotted"),
                  )
        .add_yaxis("利润", y_data2, color='green',symbol="triangle", symbol_size=20,
                   markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="min")]),
                   linestyle_opts=opts.LineStyleOpts(color="blue", width=4, type_="dashed"),
                  )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例9"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    3.10 填充区域配置项(areastyle_opts)

    areastyle_opts 参数设置填充区域,opacity 图形透明度,支持从 0 到 1 的数字,为 0 时不绘制该图形;color 填充的颜色

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',symbol="diamond",symbol_size=20,
                   areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
                  )
        .add_yaxis("利润", y_data2, color='green',symbol="triangle",symbol_size=20,
                   areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
                  )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例10"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    3.11 标记区域(markarea_opts)

    markarea_opts 参数设置标记区域,data 标记区域数据; X 相对容器的屏幕 x 坐标,单位像素,支持百分比形式;Y 相对容器的屏幕 y 坐标,单位像素,支持百分比形式;itemstyle_opts 标记样式

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis("销量", y_data1, color='blue',symbol="diamond",symbol_size=20,
                  )
        .add_yaxis("利润", y_data2, color='green',symbol="triangle",symbol_size=20,
                  )
        .set_series_opts(
            markarea_opts=opts.MarkAreaOpts(
                data=[
                    opts.MarkAreaItem(name="工作日", x=("周一", "周五"),itemstyle_opts=opts.ItemStyleOpts(color='#EF5350',opacity=0.2)),
                    opts.MarkAreaItem(name="休息日", x=("周六", "周日"),itemstyle_opts=opts.ItemStyleOpts(color='#26C6DA',opacity=0.2)),
                ]
            )
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="示例11"))
    )
    line.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    🎯🎯🎯 更多可视化项目源码+数据

    点击跳转:【全部可视化项目源码+数据】


    以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

  • 相关阅读:
    Android Native 开发 要点记录
    LeetCode-day14-521. 最长特殊序列 Ⅰ
    IB经济与商业可以一起选吗?
    MySQL主从复制(基于binlog日志方式)
    五、XML&Tomcat&Http协议
    springBoot 配置拦截器
    华为eNSP防火墙USG5500基本配置
    QProcess 调用 ffmpeg来处理音频
    MybatisPlus框架教程:入门、条件构造器、接口操作、代码生成器
    主流前沿的开源监控和报警系统Prometheus+Grafana入门之旅-中
  • 原文地址:https://blog.csdn.net/weixin_42152811/article/details/133900064