人人都会AI编程

20.3 Matplotlib / Seaborn:数据可视化、图表绘制、统计绘图

更新时间:2026-07-12

数据可视化是数据分析流程中承上启下的关键一步——它帮助你在清洗数据后快速发现模式、验证假设,并在最终报告中清晰传达结论。Python 生态中,Matplotlib 是底层绘图基石,Seaborn 是在其上的高级统计可视化封装。这一节不罗列所有参数,只讲实际工作中最常用的绘图方法与思路。


Matplotlib:灵活的基础绘图库

Matplotlib 的核心概念是图形(Figure)坐标系(Axes):一张画板(Figure)上可以放多个子图(Axes),每个子图可以独立绘制。最常用的接口是 pyplot 模块,它提供了类似 MATLAB 的命令式绘图方式。

基础绘图流程

  1. 准备数据:通常是 NumPy 数组或 Pandas 的 Series/DataFrame。
  2. 使用 plt.subplots() 创建图形和轴对象,可以指定行列数量。
  3. 在轴对象上调用绘图函数,如 plot()scatter()bar()hist() 等。
  4. 设置标题、轴标签、图例、刻度等——这些都通过轴或 pyplot 的方法完成。
  5. 调整布局后,用 plt.savefig() 保存图像或 plt.show() 显示。

最常用的图表类型及场景

  • 折线图 plot():展示趋势,如时间序列变化。只需传入 x 和 y 数据即可。
  • 散点图 scatter():观察两个连续变量之间的关系或分布。可通过颜色和大小映射第三个维度。
  • 柱状图 bar() / barh():比较分类数据的大小。Pandas 的 DataFrame.plot.bar() 可以直接从表结构生成,非常便捷。
  • 直方图 hist():展示单一连续变量的分布,观察数据的集中趋势和离散程度。
  • 饼图 pie():展示占比,但实际工作中因肉眼比较角度困难,建议优先考虑水平柱状图替代。
  • 子图组合 subplots():将多个有关系的图表并排展示,形成完整的分析视图。

样式控制

  • Matplotlib 内置了 ggplotseaborn 等多种样式表,通过 plt.style.use('style_name') 一键切换。
  • 颜色、线型、标记、透明度等细节几乎全可定制,但对于日常探索不必过度修饰。

Seaborn:面向统计的快捷可视化

Seaborn 是建立在 Matplotlib 之上的高级封装,与 Pandas DataFrame 天然集成,默认样式更美观,并内置了大量统计聚合和分布展示功能。用 Seaborn 绘图时,通常只需指定 DataFrame 和列名,它会自动处理分组、聚合和置信区间计算。

核心绘图函数

  • 分类图
  • barplot() / countplot():直接对 DataFrame 进行分组并绘制带误差条的柱状图或其计数版本。
  • boxplot() / violinplot():展示分类变量的分布形态(中位数、四分位数、异常值)或核密度估计后的“小提琴”形状,非常适合初步发现类别差异。
  • 分布图
  • histplot():直方图(可叠加核密度曲线)。
  • kdeplot():核密度估计曲线,比直方图更平滑地展现分布形状。
  • ecdfplot():经验累积分布函数图,适合比较多个分布的全局特性。
  • 关系图
  • scatterplot() / lineplot():增强版散点图和折线图,可自动按分类变量分组并显示置信区间。
  • relplot():以 FacetGrid 形式绘制多面板的关系图,适合分面展示。
  • 热力图 heatmap():直观展示矩阵型数据,如相关系数矩阵、交叉表,颜色深浅一目了然。
  • 配对图 pairplot():同时画出数据集中所有数值变量两两之间的散点图和分布直方图,是探索特征关系的快速工具。

默认美学与风格

  • Seaborn 会重置 Matplotlib 的样式参数,提供统一的灰色背景、淡色调色板。
  • 使用 sns.set_theme()sns.set_context() 可以整体调整字体大小和线条粗细,适配报告或幻灯片等不同输出场景。

与 Pandas 的配合
这是 Seaborn 最实用的特性之一:直接将一个清理好的 DataFrame 传给绘图函数,通过 data 参数指定数据框,再用列名字符串指定 x、y、hue(颜色分组)、style(样式分组)等,无需手动聚合或循环。例如,一行 sns.boxplot(data=df, x='category', y='sales') 就可以画出各类别的销售额箱线图。


实用经验与最佳实践

  • 先探索,再美化:数据分析初期用 Seaborn 的默认设置快速出图,理解数据;做报告时才用 Matplotlib 精细调整细节。
  • 尽量不用饼图:面积和角度不易精确比较,如果确需展示占比,推荐用水平柱状图或堆叠柱状图。
  • 注意颜色选择:对于分类数据用差异化明显的调色板;对于连续数据用渐变调色板(如 viridis);避免红绿色盲不易区分的配色。
  • 处理中文显示:在 Windows/Linux 下可能需要手动设置字体,或通过 plt.rcParams['font.sans-serif'] = ['SimHei'] 等方式解决乱码,这点很容易踩坑。
  • 保存高清图片:使用 plt.savefig('plot.png', dpi=300, bbox_inches='tight') 可确保输出图像清晰且内容完整。
  • 活用 Pandas 的 .plot 接口:在快速探索阶段,DataFrame.plot(kind='line') 会直接调用 Matplotlib,代码量极少,适合临时查看数据趋势。
  • 组合使用:很多高级可视化库(如 Plotly 交互图)也提供了与 Matplotlib 互转的接口,因此学好 Matplotlib/Seaborn 后,迁移到其他工具成本很低。

掌握了这两把利器,你就能在面对任何表格数据时,迅速将数字转化为有说服力的图形,无论是探索阶段自己看,还是最终呈现给他人看。接下来,我们会进入数据清洗和特征工程的环节,那时可视化将是你最重要的侦查工具。