每日五个pyecharts可视化图表-line:从入门到精通 (2)
在当今数据驱动的时代,折线图因其简洁直观的特性,成为展示时间序列数据、揭示趋势变化的黄金工具。无论是金融分析中的股票走势、科学研究中的实验数据,还是业务决策中的销售趋势,折线图都能帮助我们快速把握数据背后的规律。
本系列文章将带您从基础到高级,全面掌握pyecharts折线图的使用技巧。本文是系列的第二篇,将深入介绍五种实用折线图类型:堆叠折线图(展示累积效应)、基本折线图(经典趋势展示)、对数轴折线图(处理指数增长数据)、雨量流量关系图(多图表关联分析)和基础面积图(强调数据范围)。每种图表都配有完整代码和详细讲解,帮助您轻松应对不同的数据可视化场景。pyecahts源码
目录
- 图表1:堆叠折线图——展示数据的累积效应
- 代码解释:
- 应用场景:
- 注意事项:
- 图表2:基本折线图——经典趋势展示
- 代码解释:
- 应用场景:
- 注意事项:
- 图表3:对数轴折线图——处理指数增长数据
- 代码解释:
- 应用场景:
- 注意事项:
- 图表4:雨量流量关系图——多图表关联分析
- 代码解释:
- 应用场景:
- 注意事项:
- 图表5:基础面积图——强调数据的范围与 magnitude
- 代码解释:
- 应用场景:
- 注意事项:
- 总结:如何选择合适的折线图类型
图表1:堆叠折线图——展示数据的累积效应
堆叠折线图是一种特殊的折线图,它将多个数据系列垂直堆叠,不仅能显示每个系列的变化趋势,还能直观展示总量的变化。这种图表特别适合分析"部分与整体"的关系,比如不同渠道的流量占比、不同产品的销售构成等。
import pyecharts.options as opts
from pyecharts.charts import Line # 定义x轴数据
x_data = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]# 创建折线图对象
line_chart = Line()# 添加x轴数据
line_chart.add_xaxis(xaxis_data=x_data)# 添加邮件营销折线
line_chart.add_yaxis(series_name="邮件营销",stack="总量", # 设置堆叠名称,相同名称的系列会堆叠显示y_axis=[120, 132, 101, 134, 90, 230, 210],label_opts=opts.LabelOpts(is_show=False), # 不显示数据标签
)# 添加联盟广告折线
line_chart.add_yaxis(series_name="联盟广告",stack="总量",y_axis=[220, 182, 191, 234, 290, 330, 310],label_opts=opts.LabelOpts(is_show=False),
)# 添加视频广告折线
line_chart.add_yaxis(series_name="视频广告",stack="总量",y_axis=[150, 232, 201, 154, 190, 330, 410],label_opts=opts.LabelOpts(is_show=False),
)# 添加直接访问折线
line_chart.add_yaxis(series_name="直接访问",stack="总量",y_axis=[320, 332, 301, 334, 390, 330, 320],label_opts=opts.LabelOpts(is_show=False),
)# 添加搜索引擎折线
line_chart.add_yaxis(series_name="搜索引擎",stack="总量",y_axis=[820, 932, 901, 934, 1290, 1330, 1320],label_opts=opts.LabelOpts(is_show=False),
)# 设置全局配置
line_chart.set_global_opts(title_opts=opts.TitleOpts(title="折线图堆叠"),tooltip_opts=opts.TooltipOpts(trigger="axis"), # 触发类型为坐标轴yaxis_opts=opts.AxisOpts(type_="value",axistick_opts=opts.AxisTickOpts(is_show=True), # 显示y轴刻度splitline_opts=opts.SplitLineOpts(is_show=True), # 显示分割线),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False), # 无边界间隙
)# 在notebook中渲染
line_chart.render_notebook()
代码解释:
x_data
定义了x轴的星期数据stack="总量"
设置堆叠名称,相同名称的系列会堆叠显示label_opts=opts.LabelOpts(is_show=False)
不显示数据标签,避免图表过于拥挤trigger="axis"
设置提示框触发类型为坐标轴,当鼠标悬停在坐标轴上时显示提示信息boundary_gap=False
设置坐标轴无边界间隙,使折线图从坐标轴原点开始绘制
应用场景:
堆叠折线图特别适合展示多个相关数据系列的累积趋势,如不同渠道的流量来源、不同产品的销售构成、不同部门的费用支出等。通过堆叠显示,可以直观地看出总量的变化趋势以及各个组成部分的贡献。
注意事项:
- 堆叠折线图适合展示有累积关系的数据,若数据之间没有累积关系,可能会导致误解
- 过多的堆叠系列会使图表难以阅读,建议控制在5个以内
- 可以通过调整系列的顺序来突出重要的数据系列
图表2:基本折线图——经典趋势展示
基本折线图是数据可视化中最基础、最常用的图表类型。它通过连接数据点形成线条,清晰展示数据随时间或其他连续变量的变化趋势。无论是股票价格、气温变化还是销售业绩,基本折线图都能帮助我们快速捕捉数据的起伏规律。
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker c = (Line().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例"))#.render("line_base.html")
)
c.render_notebook()
代码解释:
Faker.choose()
生成随机的类别数据作为x轴Faker.values()
生成随机的数值数据作为y轴add_yaxis
方法添加两个数据系列:商家A和商家Bset_global_opts
设置图表标题render_notebook()
在notebook中渲染图表
应用场景:
基本折线图适合展示简单的趋势变化,如股票价格走势、气温变化、销售业绩趋势等。当你需要快速查看数据随时间或其他连续变量的变化情况时,基本折线图是最直接的选择。
注意事项:
- 基本折线图适合展示较少的数据系列(通常2-3个),过多会导致图表拥挤
- 确保x轴数据和y轴数据长度一致
- Faker类用于生成测试数据,实际应用中应替换为真实数据
图表3:对数轴折线图——处理指数增长数据
当数据呈现指数增长或跨越多个数量级时,普通的线性坐标轴会导致图表难以阅读。对数轴折线图通过对数变换,将指数增长转换为线性增长,使数据变化趋势更加清晰。这种图表在金融、生物、物理等领域有着广泛应用。
import pyecharts.options as opts
from pyecharts.charts import Line c = (Line().add_xaxis(xaxis_data=["一", "二", "三", "四", "五", "六", "七", "八", "九"]).add_yaxis("2 的指数",y_axis=[1, 2, 4, 8, 16, 32, 64, 128, 256],linestyle_opts=opts.LineStyleOpts(width=2),).add_yaxis("3 的指数",y_axis=[1, 3, 9, 27, 81, 247, 741, 2223, 6669],linestyle_opts=opts.LineStyleOpts(width=2),).set_global_opts(title_opts=opts.TitleOpts(title="Line-对数轴示例"),xaxis_opts=opts.AxisOpts(name="x"),yaxis_opts=opts.AxisOpts(type_="log",name="y",splitline_opts=opts.SplitLineOpts(is_show=True),is_scale=True,),)#.render("line_yaxis_log.html")
)
c.render_notebook()
代码解释:
type_="log"
设置y轴为对数轴,适合展示指数增长数据is_scale=True
开启坐标轴缩放功能,使数据显示更加合理linestyle_opts=opts.LineStyleOpts(width=2)
设置线条宽度为2,增强可读性splitline_opts=opts.SplitLineOpts(is_show=True)
显示分割线,帮助读取数据
应用场景:
对数轴折线图特别适合展示以下类型的数据:
- 指数增长数据,如人口增长、细菌繁殖、投资复利等
- 大范围变化的数据,如从1到10000的数值变化
- 比率变化数据,如市场份额、增长率等
- 科学数据,如pH值、地震震级、声音分贝等对数刻度数据
注意事项:
- 对数轴不能显示零或负数,因为对数函数在这些值上无定义
- 确保数据中没有零或负数,否则图表会显示异常
- 对数轴可能会掩盖数据的实际差异,需要向观众解释对数刻度的特点
- 对于不熟悉对数刻度的观众,建议同时提供原始数据或线性刻度的图表作为参考
图表4:雨量流量关系图——多图表关联分析
在实际数据分析中,我们 often需要同时展示多个相关数据系列。雨量流量关系图通过Grid布局将两个折线图上下排列,共享同一时间轴,使我们能够直观观察降雨量与河流水位之间的关系。这种布局方式特别适合展示因果关系或相关分析。
import pyecharts.options as opts
from pyecharts.charts import Line, Grid # 注意:以下数据为示例,实际使用时请替换为真实数据
# timeData = [...] # 时间数据
# water_flowData = [...] # 流量数据
# rainfallData = [...] # 降雨量数据l1 = (Line().add_xaxis(xaxis_data=timeData).add_yaxis(series_name="流量",y_axis=water_flowData,symbol_size=8,is_hover_animation=False,label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(width=1.5),is_smooth=True,).set_global_opts(title_opts=opts.TitleOpts(title="雨量流量关系图", subtitle="数据来自西安兰特水电测控技术有限公司", pos_left="center"),tooltip_opts=opts.TooltipOpts(trigger="axis"),axispointer_opts=opts.AxisPointerOpts(is_show=True, link=[{"xAxisIndex": "all"}]),datazoom_opts=[opts.DataZoomOpts(is_show=True,is_realtime=True,start_value=30,end_value=70,xaxis_index=[0, 1],)],xaxis_opts=opts.AxisOpts(type_="category",boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=True),),yaxis_opts=opts.AxisOpts(max_=500, name="流量(m^3/s)"),legend_opts=opts.LegendOpts(pos_left="left"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"dataZoom": {"yAxisIndex": "none"},"restore": {},"saveAsImage": {},},),)
)l2 = (Line().add_xaxis(xaxis_data=timeData).add_yaxis(series_name="降雨量",y_axis=rainfallData,xaxis_index=1,yaxis_index=1,symbol_size=8,is_hover_animation=False,label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(width=1.5),is_smooth=True,).set_global_opts(axispointer_opts=opts.AxisPointerOpts(is_show=True, link=[{"xAxisIndex": "all"}]),tooltip_opts=opts.TooltipOpts(trigger="axis"),xaxis_opts=opts.AxisOpts(grid_index=1,type_="category",boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=True),position="top",),datazoom_opts=[opts.DataZoomOpts(is_realtime=True,type_="inside",start_value=30,end_value=70,xaxis_index=[0, 1],)],yaxis_opts=opts.AxisOpts(is_inverse=True, name="降雨量(mm)"),legend_opts=opts.LegendOpts(pos_left="7%"),)
)(Grid(init_opts=opts.InitOpts(width="1024px", height="768px")).add(chart=l1, grid_opts=opts.GridOpts(pos_left=50, pos_right=50, height="35%")).add(chart=l2,grid_opts=opts.GridOpts(pos_left=50, pos_right=50, pos_top="55%", height="35%"),)#.render("rainfall_and_water_flow.html").render_notebook()
)
代码解释:
from pyecharts.charts import Line, Grid
导入需要的图表组件is_smooth=True
设置线条平滑显示datazoom_opts
添加数据缩放功能,支持实时缩放xaxis_index
和yaxis_index
设置多坐标轴索引Grid
组件用于布局多个图表,实现上下排列is_inverse=True
设置y轴反向,使降雨量图表从下往上递增- 代码中省略了数据字典的定义,实际使用时需要补充
timeData
、water_flowData
和rainfallData
的具体值
应用场景:
这种上下布局的折线图特别适合展示以下场景:
- 相关数据的对比分析,如雨量与流量、气温与能耗、股票价格与交易量等
- 因果关系的研究,如降雨量对河流水位的影响、促销活动对销售额的影响等
- 多指标监控,如同时监控系统性能的多个指标变化趋势
- 环境监测数据可视化,如气温、湿度、气压等多种气象数据的同时展示
注意事项:
- 确保两个图表的x轴数据一致,以便进行有效的对比分析
- 合理设置图表的高度和位置,避免图表过于拥挤或比例失调
- 对于反向坐标轴(
is_inverse=True
),需要向观众说明数据的读取方式 - 数据缩放功能(
datazoom_opts
)可以帮助查看数据细节,但需要注意设置合适的初始缩放范围 - 实际使用时,需要补充完整的数据定义部分,确保图表能够正常渲染
图表5:基础面积图——强调数据的范围与 magnitude
基础面积图在折线图的基础上,为线条下方添加了颜色填充,形成一个封闭的区域。这种设计不仅保留了折线图展示趋势的功能,还通过颜色块的大小直观展示数据的范围和 magnitude,特别适合强调单一数据系列的变化。
import pyecharts.options as opts
from pyecharts.charts import Line """
Gallery 使用 pyecharts 1.1.0
参考地址: `https://echarts.apache.org/examples/editor.html?c=area-basic` 目前无法实现的功能:暂无
"""x_data = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
y_data = [820, 932, 901, 934, 1290, 1330, 1320](Line().add_xaxis(xaxis_data=x_data).add_yaxis(series_name="",y_axis=y_data,symbol="emptyCircle",is_symbol_show=True,label_opts=opts.LabelOpts(is_show=False),areastyle_opts=opts.AreaStyleOpts(opacity=1, color="#C67570"),).set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=False),yaxis_opts=opts.AxisOpts(type_="value",axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),)# 设置 boundary_gap 的时候一定要放在最后一个配置项里, 不然会被覆盖#.render("basic_area_chart.html").render_notebook()
)
代码解释:
symbol="emptyCircle"
设置标记点为空心圆is_symbol_show=True
显示标记点areastyle_opts=opts.AreaStyleOpts(opacity=1, color="#C67570")
设置区域填充样式,透明度为1,颜色为#C67570tooltip_opts=opts.TooltipOpts(is_show=False)
不显示提示框boundary_gap=False
设置x轴无边界间隙
应用场景:
基础面积图适合展示以下类型的数据:
- 单一数据系列的变化趋势,特别是当需要强调数据的范围和 magnitude 时
- 随时间变化的累计数据,如网站访问量、销售额等
- 需要突出显示峰值和谷值的数据
- 比较简单的时间序列数据,不需要展示多个数据系列的关系
注意事项:
- 基础面积图通常只适合展示单个数据系列,多个数据系列可能会导致图表难以阅读
- 可以通过调整透明度(opacity)来改善图表的可读性,特别是当有背景网格线时
- 选择合适的填充颜色,避免过于鲜艳或刺眼的颜色
- 当数据点较少时,区域填充可能会使图表看起来不够平滑
- 如果需要显示数据标签,可以设置
label_opts=opts.LabelOpts(is_show=True)
总结:如何选择合适的折线图类型
通过本文的学习,我们掌握了五种不同风格的折线图:
- 堆叠折线图:适合展示多个数据系列的累积效应和总量变化
- 基本折线图:最常用的趋势展示工具,适合简单的时间序列数据
- 对数轴折线图:处理指数增长或大范围变化的数据
- 雨量流量关系图:通过多图表布局展示相关数据的关联关系
- 基础面积图:强调单一数据系列的范围和 magnitude
在实际应用中,应根据数据特点和分析目标选择合适的折线图类型。例如,展示销售构成时选择堆叠折线图,分析股票长期走势时使用对数轴折线图,研究相关因素关系时采用雨量流量关系图布局。
希望本文能帮助您更好地利用pyecharts创建专业、美观的数据可视化图表。在后续系列中,我们将继续探索更多高级图表类型和技巧,敬请期待!