数据可视化是数据分析流程中承上启下的关键一步——它帮助你在清洗数据后快速发现模式、验证假设,并在最终报告中清晰传达结论。Python 生态中,Matplotlib 是底层绘图基石,Seaborn 是在其上的高级统计可视化封装。这一节不罗列所有参数,只讲实际工作中最常用的绘图方法与思路。
Matplotlib:灵活的基础绘图库
Matplotlib 的核心概念是图形(Figure)和坐标系(Axes):一张画板(Figure)上可以放多个子图(Axes),每个子图可以独立绘制。最常用的接口是 pyplot 模块,它提供了类似 MATLAB 的命令式绘图方式。
基础绘图流程
- 准备数据:通常是 NumPy 数组或 Pandas 的 Series/DataFrame。
- 使用
plt.subplots()创建图形和轴对象,可以指定行列数量。 - 在轴对象上调用绘图函数,如
plot()、scatter()、bar()、hist()等。 - 设置标题、轴标签、图例、刻度等——这些都通过轴或 pyplot 的方法完成。
- 调整布局后,用
plt.savefig()保存图像或plt.show()显示。
最常用的图表类型及场景
- 折线图
plot():展示趋势,如时间序列变化。只需传入 x 和 y 数据即可。 - 散点图
scatter():观察两个连续变量之间的关系或分布。可通过颜色和大小映射第三个维度。 - 柱状图
bar()/barh():比较分类数据的大小。Pandas 的DataFrame.plot.bar()可以直接从表结构生成,非常便捷。 - 直方图
hist():展示单一连续变量的分布,观察数据的集中趋势和离散程度。 - 饼图
pie():展示占比,但实际工作中因肉眼比较角度困难,建议优先考虑水平柱状图替代。 - 子图组合
subplots():将多个有关系的图表并排展示,形成完整的分析视图。
样式控制
- Matplotlib 内置了
ggplot、seaborn等多种样式表,通过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 后,迁移到其他工具成本很低。
掌握了这两把利器,你就能在面对任何表格数据时,迅速将数字转化为有说服力的图形,无论是探索阶段自己看,还是最终呈现给他人看。接下来,我们会进入数据清洗和特征工程的环节,那时可视化将是你最重要的侦查工具。