每日五个pyecharts可视化图表-line:从入门到精通 (3)
欢迎来到pyecharts折线图系列的第三篇文章!在前两篇中,我们已经掌握了堆叠折线图、基本折线图、对数轴折线图、雨量流量关系图和基础面积图等实用图表类型。折线图作为数据可视化中最常用的图表类型之一,能够清晰地展示数据随时间或其他连续变量的变化趋势,是数据分析和决策中不可或缺的工具。
在本文中,我们将深入探讨五种更高级的折线图类型:平滑折线图、雨量流量关系图、多X轴折线图、堆叠区域图和阶梯图。这些图表类型各有特色,适用于不同的数据分析场景。无论您是数据分析师、研究员还是学生,掌握这些高级折线图技巧都将帮助您创建更加专业、直观的数据可视化效果。让我们开始这段学习之旅吧!pyecahts源码
目录
- 图表1:平滑折线图——让数据趋势更流畅
- 代码解释:
- 应用场景:
- 注意事项:
- 图表2:雨量流量关系图——双Y轴数据对比分析
- 代码解释:
- 应用场景:
- 注意事项:
- 图表3:多X轴折线图——不同时间维度数据对比
- 代码解释:
- 应用场景:
- 注意事项:
- 图表4:堆叠区域图——数据累积效应可视化
- 代码解释:
- 应用场景:
- 注意事项:
- 图表5:阶梯图——离散数据变化的完美呈现
- 代码解释:
- 应用场景:
- 注意事项:
- 总结
图表1:平滑折线图——让数据趋势更流畅
平滑折线图通过曲线拟合数据点,使折线更加平滑流畅,适合展示趋势变化较为平缓的数据。这种图表能够减少数据波动带来的视觉干扰,更清晰地呈现数据的整体趋势。
平滑折线图通过曲线拟合数据点,使折线更加平滑流畅,适合展示趋势变化较为平缓的数据。这种图表能够减少数据波动带来的视觉干扰,更清晰地呈现数据的整体趋势。
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(), is_smooth=True) .add_yaxis("商家B", Faker.values(), is_smooth=True) .set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth")) #.render("line_smooth.html")
)
c.render_notebook()
代码解释:
is_smooth=True
是实现平滑折线的关键参数,它会使折线图的线条变得平滑流畅Faker.choose()
生成随机的类别数据作为x轴Faker.values()
生成随机的数值数据作为y轴- 代码中同时添加了两个数据系列(商家A和商家B)进行对比
render_notebook()
方法用于在Jupyter Notebook中渲染图表
应用场景:
平滑折线图特别适合以下场景:
- 展示长期趋势数据,如股票价格的长期走势、气温的季节变化等
- 当数据点较多且波动较大时,平滑折线可以减少视觉干扰
- 需要呈现数据整体趋势而非具体数据点时
- 制作更具美感的数据可视化报告
注意事项:
- 平滑折线图会一定程度上改变原始数据的形状,可能会掩盖一些细节波动
- 对于需要精确展示每个数据点的场景,不建议使用平滑折线
- 可以通过调整
is_smooth
参数的值来控制平滑程度(True/False) - Faker类用于生成测试数据,实际应用中应替换为真实数据
图表2:雨量流量关系图——双Y轴数据对比分析
雨量流量关系图是一种特殊的折线图,它可以同时展示两个相关指标(流量和降雨量)的变化趋势,并通过双Y轴让两者在同一图表中进行对比分析。这种图表特别适用于水文、气象等领域的数据可视化。
雨量流量关系图是一种特殊的折线图,它可以同时展示两个相关指标(流量和降雨量)的变化趋势,并通过双Y轴让两者在同一图表中进行对比分析。这种图表特别适用于水文、气象等领域的数据可视化。
import pyecharts.options as opts
from pyecharts.charts import Line# 假设这些数据已定义
# x_data = [...]
# y_data_flow_amount = [...]
# y_data_rain_fall_amount = [...]c = (Line().add_xaxis(xaxis_data=x_data).add_yaxis(series_name="流量",y_axis=y_data_flow_amount,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),linestyle_opts=opts.LineStyleOpts(),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="降雨量",y_axis=y_data_rain_fall_amount,yaxis_index=1,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),linestyle_opts=opts.LineStyleOpts(),label_opts=opts.LabelOpts(is_show=False),).extend_axis(yaxis=opts.AxisOpts(name="降雨量(mm)",name_location="start",type_="value",max_=5,is_inverse=True,axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),)).set_global_opts(title_opts=opts.TitleOpts(title="雨量流量关系图",subtitle="数据来自西安兰特水电测控技术有限公司",pos_left="center",pos_top="top",),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),legend_opts=opts.LegendOpts(pos_left="left"),datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=100),opts.DataZoomOpts(type_="inside", range_start=0, range_end=100),],xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),yaxis_opts=opts.AxisOpts(name="流量(m^3/s)", type_="value", max_=500),).set_series_opts(markarea_opts=opts.MarkAreaOpts(is_silent=False,data=[opts.MarkAreaItem(name="流量",x=("2009/9/12-7:00", "2009/9/22-7:00"),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="#DCA3A2", opacity=0.5),),opts.MarkAreaItem(name="降雨量",x=("2009/9/10-7:00", "2009/9/20-7:00"),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="#A1A9AF", opacity=0.5),),],),axisline_opts=opts.AxisLineOpts(),)#.render("rainfall.html").render_notebook()
)
代码解释:
extend_axis
方法用于添加额外的Y轴,这里添加了一个用于显示降雨量的Y轴yaxis_index=1
表示该数据系列使用第二个Y轴(降雨量轴)areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
设置了区域填充样式,增加了图表的可视化效果datazoom_opts
添加了数据缩放功能,方便查看不同时间段的数据markarea_opts
用于标记特定区域,可以突出显示重要的数据段is_inverse=True
设置了降雨量Y轴为反向,使其从下往上递增
应用场景:
雨量流量关系图特别适合以下场景:
- 水文监测数据可视化,展示降雨量与河流水位/流量的关系
- 气象数据分析,研究降水与其他气象指标的关联
- 环境科学中,分析降雨对地下水、地表径流的影响
- 城市排水系统设计,评估降雨量与排水量的关系
注意事项:
- 确保两个数据系列(流量和降雨量)的时间范围一致,以便正确对比
- 适当调整两个Y轴的刻度范围,避免数据过于拥挤或稀疏
- 区域填充的透明度(opacity)不宜过高,以免遮挡其他数据
- 标记区域(MarkArea)的颜色应与对应的数据系列颜色协调
- 实际应用中需要替换示例代码中的数据占位符为真实数据
图表3:多X轴折线图——不同时间维度数据对比
多X轴折线图是一种高级折线图类型,它允许在同一个图表中展示多个时间维度的数据,特别适合比较不同年份同期数据的变化趋势。这种图表通过扩展X轴的方式,可以在同一可视化空间内容纳更多的时间序列数据。
多X轴折线图是一种高级折线图类型,它允许在同一个图表中展示多个时间维度的数据,特别适合比较不同年份同期数据的变化趋势。这种图表通过扩展X轴的方式,可以在同一可视化空间内容纳更多的时间序列数据。
import pyecharts.options as opts
from pyecharts.charts import Line# 将在 v1.1.0 中更改
from pyecharts.commons.utils import JsCode"""
Gallery 使用 pyecharts 1.0.0
参考地址: `https://echarts.apache.org/examples/editor.html?c=multiple-x-axis` 目前无法实现的功能:1、暂无
"""js_formatter = """function (params) {console.log(params);return '降水量 ' + params.value + (params.seriesData.length ? ':' + params.seriesData[0].data : '');}"""(Line().add_xaxis(xaxis_data=["2016-1","2016-2","2016-3","2016-4","2016-5","2016-6","2016-7","2016-8","2016-9","2016-10","2016-11","2016-12",]).extend_axis(xaxis_data=["2015-1","2015-2","2015-3","2015-4","2015-5","2015-6","2015-7","2015-8","2015-9","2015-10","2015-11","2015-12",],xaxis=opts.AxisOpts(type_="category",axistick_opts=opts.AxisTickOpts(is_align_with_label=True),axisline_opts=opts.AxisLineOpts(is_on_zero=False, linestyle_opts=opts.LineStyleOpts(color="#6e9ef1")),axispointer_opts=opts.AxisPointerOpts(is_show=True, label=opts.LabelOpts(formatter=JsCode(js_formatter))),),).add_yaxis(series_name="2015 降水量",is_smooth=True,symbol="emptyCircle",is_symbol_show=False,# xaxis_index=1,color="#d14a61",y_axis=[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(width=2),).add_yaxis(series_name="2016 降水量",is_smooth=True,symbol="emptyCircle",is_symbol_show=False,color="#6e9ef1",y_axis=[3.9, 5.9, 11.1, 18.7, 48.3, 69.2, 231.6, 46.6, 55.4, 18.4, 10.3, 0.7],label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(width=2),).set_global_opts(legend_opts=opts.LegendOpts(),tooltip_opts=opts.TooltipOpts(trigger="none", axis_pointer_type="cross"),xaxis_opts=opts.AxisOpts(type_="category",axistick_opts=opts.AxisTickOpts(is_align_with_label=True),axisline_opts=opts.AxisLineOpts(is_on_zero=False, linestyle_opts=opts.LineStyleOpts(color="#d14a61")),axispointer_opts=opts.AxisPointerOpts(is_show=True, label=opts.LabelOpts(formatter=JsCode(js_formatter))),),yaxis_opts=opts.AxisOpts(type_="value",splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)),),)#.render("multiple_x_axes.html").render_notebook()
)
代码解释:
extend_axis
方法用于添加额外的X轴,这里添加了一个用于显示2015年数据的X轴JsCode
用于在Python代码中嵌入JavaScript函数,这里用于自定义tooltip的格式化显示is_smooth=True
设置折线为平滑曲线symbol="emptyCircle"
设置标记点为空圆圈is_symbol_show=False
隐藏标记点axisline_opts
用于设置坐标轴的样式,包括颜色和是否在零点axispointer_opts
用于设置坐标轴指示器的样式和格式化
应用场景:
多X轴折线图特别适合以下场景:
- 对比不同年份同期数据的变化趋势,如降水量、气温、销售量等
- 分析时间序列数据的季节性变化
- 展示多个时间维度的数据,节省可视化空间
- 财经数据对比分析,如不同年度的股票价格走势
注意事项:
- 确保不同X轴的数据格式一致,便于对比分析
- 适当设置坐标轴的颜色和样式,提高图表的可读性
- 对于过多的X轴数据,考虑使用数据缩放功能
- 注意JavaScript代码的正确嵌入方式,避免语法错误
- 测试tooltip的显示效果,确保格式化函数工作正常
图表4:堆叠区域图——数据累积效应可视化
堆叠区域图是一种特殊的折线图,它通过在折线下方填充颜色来展示数据的累积效果。这种图表特别适合展示多个数据系列的总量及其构成,能够清晰地反映各部分对整体的贡献。
堆叠区域图是一种特殊的折线图,它通过在折线下方填充颜色来展示数据的累积效果。这种图表特别适合展示多个数据系列的总量及其构成,能够清晰地反映各部分对整体的贡献。
import pyecharts.options as opts
from pyecharts.charts import Line"""
Gallery 使用 pyecharts 1.1.0
参考地址: `https://echarts.apache.org/examples/editor.html?c=area-stack` 目前无法实现的功能:暂无
"""x_data = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
y_data = [820, 932, 901, 934, 1290, 1330, 1320](Line().add_xaxis(xaxis_data=x_data).add_yaxis(series_name="邮件营销",stack="总量",y_axis=[120, 132, 101, 134, 90, 230, 210],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="联盟广告",stack="总量",y_axis=[220, 182, 191, 234, 290, 330, 310],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="视频广告",stack="总量",y_axis=[150, 232, 201, 154, 190, 330, 410],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="直接访问",stack="总量",y_axis=[320, 332, 301, 334, 390, 330, 320],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="搜索引擎",stack="总量",y_axis=[820, 932, 901, 934, 1290, 1330, 1320],areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=True, position="top"),).set_global_opts(title_opts=opts.TitleOpts(title="堆叠区域图"),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),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),)#.render("stacked_area_chart.html").render_notebook()
)
代码解释:
stack="总量"
是实现堆叠效果的关键参数,所有设置了相同stack值的数据系列将被堆叠显示areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
设置了区域填充样式和透明度label_opts=opts.LabelOpts(is_show=False)
隐藏了大部分数据系列的标签,仅在最后一个系列显示xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False)
设置了x轴为类别类型,并关闭了边界间隙tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross")
设置了tooltip以坐标轴触发,并使用十字指针
应用场景:
堆叠区域图特别适合以下场景:
- 展示多个数据系列的累积效果,如网站流量的来源构成
- 分析各部分数据对整体的贡献,如销售业绩的产品类别占比
- 监控时间序列数据的变化趋势及其构成,如用户增长的渠道分析
- 比较不同时期的数据构成变化,如季度收入的业务线分布
注意事项:
- 数据系列不宜过多,否则会导致图表难以阅读
- 合理设置区域填充的透明度,避免遮挡下层数据
- 确保各数据系列的总和与图表标题一致,避免误导读者
- 对于重要的数据点,可以单独设置标签显示
- 考虑使用渐变色填充,提高图表的美观度和可读性
图表5:阶梯图——离散数据变化的完美呈现
阶梯图是一种特殊的折线图,它通过水平和垂直的线段连接数据点,形成阶梯状的线条。这种图表特别适合展示离散型数据的变化,或者当数据在某个时间点发生突变时的可视化。
阶梯图是一种特殊的折线图,它通过水平和垂直的线段连接数据点,形成阶梯状的线条。这种图表特别适合展示离散型数据的变化,或者当数据在某个时间点发生突变时的可视化。
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(), is_step=True) .set_global_opts(title_opts=opts.TitleOpts(title="Line-阶梯图")) #.render("line_step.html")
)
c.render_notebook()
代码解释:
is_step=True
是实现阶梯图的关键参数,它会使折线图的线条呈现阶梯状Faker.choose()
生成随机的类别数据作为x轴Faker.values()
生成随机的数值数据作为y轴- 代码中只添加了一个数据系列(商家A)
render_notebook()
方法用于在Jupyter Notebook中渲染图表
应用场景:
阶梯图特别适合以下场景:
- 展示离散数据的变化,如股票价格在交易日结束时的变化
- 表示数据在特定时间点的突变,如政策变化前后的指标对比
- 模拟开关状态的变化,如设备的开启/关闭状态随时间的变化
- 显示按阶段变化的业务指标,如季度销售额的变化
注意事项:
- 阶梯图更适合展示离散型数据,对于连续型数据可能不太合适
- 确保x轴的数据是有序的,以便正确展示阶梯效果
- 对于多个数据系列,要注意颜色和样式的区分,避免混淆
- Faker类用于生成测试数据,实际应用中应替换为真实数据
- 可以通过调整线条样式和标记点来增强图表的可读性
总结
在本文中,我们学习了五种高级折线图类型:
- 平滑折线图:通过曲线拟合数据点,减少波动干扰,清晰呈现整体趋势
- 雨量流量关系图:使用双Y轴展示两个相关指标的变化趋势,适用于对比分析
- 多X轴折线图:在同一图表中展示多个时间维度的数据,便于不同年份同期数据对比
- 堆叠区域图:展示多个数据系列的累积效果,清晰反映各部分对整体的贡献
- 阶梯图:通过水平和垂直线段连接数据点,完美呈现离散数据的变化
每种折线图都有其独特的应用场景和配置技巧。在实际应用中,您可以根据数据特点和分析需求选择合适的图表类型。希望本文能够帮助您进一步提升数据可视化技能,创建更加专业、直观的数据图表。
如果您想了解更多关于pyecharts的使用技巧,请关注我们的系列文章。感谢您的阅读!