数据可视化是数据科学家传递数据价值、挖掘数据洞察、完成数据叙事的核心手段。对于Python开发者而言,丰富的第三方可视化工具库,能够支撑我们制作各类精美且专业的数据图表。本文将介绍多款小众但实用性极强的可视化图表,包括桑基图、脊线图、内嵌放大图、雷达图与词云图等。文章将基于Matplotlib、Seaborn、Plotly等主流Python可视化框架,手把手实现各类特色可视化图表,让数据呈现更生动、数据故事更饱满。
本文将依托图形的形状、尺寸、色彩、朝向、面积和标记样式等视觉元素,完成十种不同业务场景的数据绘图。所有案例均遵循有效、高效、美观三大可视化原则,具体定义如下:
(a) 有效:完整承载核心业务信息,无关键数据缺失;
(b) 高效:画面简洁精炼,无冗余无效信息干扰;
(c) 美观:布局清晰规整,视觉呈现舒适,重点突出。
全文所有案例均采用二维绘图形式。相较于三维图表,二维可视化画面更直观、数据对比更清晰、距离与数值关系更易解读,落地实用性更强。下文将逐一展示十个实战用例的代码实现,并解析代码逻辑与图表核心解读要点。
用例 1
描述大学之间学生交流流动的桑基图。
桑基图主要用于直观展示各类资源的流动与转化关系。本案例利用桑基图,可视化两所高校之间各院系的交换生流动数据。其中字符“A”“B”分别代表两所不同高校,数字3、4、5依次对应统计学、数学、物理三大院系。
代码中通过字典格式定义节点(node)与链路(link)两大核心参数。节点标签由唯一的院系名称构成,链路则通过流出院系索引与流入院系索引,构建双向流动关系。
如图1所示,将鼠标悬浮于“3A”节点的橙色区块时,可精准查看该节点的交换数据:A校3院系接收交换生1次、派出交换生3次。该数据可通过代码中数据字典的流出、流入列表频次交叉验证。节点左侧标注的数字9,代表3A院系向B校输出的交换生总人数,可通过累加对应流动数值得出。
点击对应节点后,该节点延伸出的流动箭头会自动加深高亮,清晰关联所有对接的流动节点。同时箭头粗细与流动数值大小正相关。整体而言,桑基图依托箭头方向与粗细,直观传递数据流动方向与体量,通过节点汇总实现流量累计统计。
图 1. 桑基图显示了两所大学各系之间的学生交流流用例 2绘制一家房地产中介公司的房屋销售数据。
本案例针对房产中介上月成交房源数据,搭建二维可视化图表,单图承载多维度房源信息,包括房屋售价、距市中心距离、房源方位、中介佣金、销售职级(助理、副总裁、合伙人)。二维散点图可通过自定义图形元素,高效承载多维度业务数据,本案例采用笑脸表情符号作为数据标记完成可视化。
具体来说,使用“笑脸表情符号”实现方法的代码片段如下。
如图2所示,图表X轴代表房源距市中心距离,Y轴代表房屋售价,各视觉元素对应不同业务指标:
1. 表情符号尺寸:对应销售中介职级,尺寸越大,职级越高;
2. 表情符号朝向:对应房源相对市中心的方位(上下左右分别对应北南西东);
3. 表情符号颜色:对应中介佣金比例,石灰色代表6%佣金、粉红色代表5%佣金,契合行业售价越高、佣金比例越高的规则。
本用例通过自定义表情符号的颜色、大小、位置三大属性,在单张二维散点图中,高效融合房源五大核心维度数据,验证了自定义图形标记在多维数据可视化中的实用性。
图 2. 房屋销售数据散点图用例 3针对高校学院、院系的层级化结构与规模数据,本案例采用旭日图实现可视化。旭日图适配层级分类数据,可同时展示数据层级关系与各模块体量大小。
代码通过三组核心数组构建图表:名称数组定义各层级模块标签,父级数组搭建院系层级架构,数值数组设定各模块的规模占比。
图表区块面积与对应数值成正比,点击任意区块可精准查看具体数据,如免疫学模块数值239。整体通过尺寸、配色、文本标注三重元素,清晰呈现高校院系的层级架构与规模差异。
图 3. 旭日图显示了一所大学不同学院和系的结构用例 4本案例延续房产销售数据分析场景,需同时展示房源售价、房屋面积、距海边距离、距火车站距离四大维度数据,并对成交房源最多的核心区间进行放大突出,此处采用内嵌插图功能实现重点区域聚焦。
如图4所示,图表X轴为房屋面积、Y轴为房屋售价,菱形标记代表单套成交房源,标记颜色对应房源距海边距离,标记尺寸对应房源距火车站距离。内嵌插图可放大核心数据区间,有效突出高成交热度的数据段,大幅提升图表的信息传递效率与可读性。
图 4. 带有插图的房屋销售数据用例 5在本例中,我们将使用词云图。这种图表包含不同大小的词语,词语的大小取决于它在原文中出现的频率。图 5 显示了词云图,下面的代码片段显示了生成该图的 Python 代码。
图 5. 根据公众号简介创建的词云
用例 6以清晰而有说服力的方式介绍一种新零食产品的优势。
针对新品营销调研数据,本案例采用雷达图对比高蛋白棒新旧配方的用户评分数据,对比维度包含性价比、营养价值、外观、口味四大指标。雷达图又称蛛网图、戴布拉图,以中心辐射式坐标轴展示各维度数值,通过折线连接同系列数据形成闭合多边形,依托不同配色区分多组数据,直观凸显数据差异。
图 6 显示了生成的图形,下面的代码片段显示了生成图形的 Python 代码。下面代码的第 7-9 行有一个有趣的地方。enpoint被设置为False,第一个值被添加到 old_values 和 new_values 数组的末尾,以关闭循环。
如下图所示,人们认为新的蛋白质棒在三个关键方面优于旧产品:营养价值、口味和性价比。
在这个案例中,展示了如何利用颜色和形状在雷达图上区分两种产品。
图 6. 展示两种产品属性差异的雷达图
用例 7在同一幅图上,显示不同类型图书在这些类型的图书节前后的销售情况。
在这个案例中,我们需用同一图绘制不同类别的时间数据。Python的ridge plot适合这种情况。桥形图以不同类别分布的垂直堆叠图呈现,便于比较它们的异同。图7显示了不同图书类型的销售差异以相应图书节为中心。将分布图放在同一图上,使用不同颜色,可创建一个视觉效果良好的图表,有效比较。
相应代码如下:

图 7. 图书类型的脊状分布图
用例 8给定信用卡公司提供的有关年龄和购买金额的数据,在图中突出显示购买金额最高的组别。
二维直方图似乎适合这类数据,与标准直方图不同,标准直方图按一维分类,而二维直方图同时按两个维度分类。以下是代码片段和图8显示的生成的二维直方图。
下面的二维柱状图显示,消费金额最高的是 35-45 岁的人群。总之,二维柱状图有效且直观地显示了购买金额最高的群体。
图 8:显示年龄与购买金额的二维柱状图
用例 9在一幅图中,显示 1990-2010 年生物、天文、物理和数学系的学生人数。
在这种情况下,我们可以使用堆叠面积图。这种类型的图表用于显示不同类别的时间数据,可以使用堆叠区域图来展示不同类别的时间数据,用户可以看到: