Python 数据可视化:Matplotlib 与 Seaborn 学习笔记
完成 Pandas 的筛选、分组和统计后下一步就是把数字转换成直观结论。数据可视化的重点并不是“图画得多漂亮”而是选择正确的图表回答正确的问题。本篇复盘 Matplotlib 与 Seaborn 的常用图形、选图逻辑和图片导出。一、先问问题再选择图表开始画图前先明确这张图要回答什么问题。常见需求可以对应为分析问题推荐图表随时间如何变化折线图line不同类别谁高谁低柱状图bar数据分布是什么形状直方图histplot两个数值变量有什么关系散点图scatterplot不同组的分布有何差异箱线图 / 小提琴图多个数值变量如何相关热力图heatmap一个简单原则是折线看趋势、柱形做比较、直方看分布、散点看关系、热力图找相关线索。二、Matplotlib 的 Figure 与 AxesMatplotlib 中最重要的两个对象是Figure和Axes。可以把Figure理解为整张画布把Axes理解为画布中的一个坐标系。import matplotlib.pyplot as plt fig, ax plt.subplots(figsize(6, 4)) ax.plot([1, 2, 3], [2, 4, 3]) ax.set_title(Trend Demo) ax.set_xlabel(Time) ax.set_ylabel(Value) plt.show()虽然plt.plot()等快捷写法适合临时画单图但多子图时更推荐ax.plot()、ax.bar()等面向对象写法因为每一步都明确指定绘制到哪个坐标轴。fig, axes plt.subplots(1, 2, figsize(8, 3)) axes[0].bar([A, B], [3, 5]) axes[1].plot([1, 2, 3], [2, 1, 4]) fig.tight_layout()Notebook 中反复创建大量图形时可以在不再需要后执行plt.close(fig)减少图形对象堆积。多子图是实际分析中非常常见的能力。例如plt.subplots(2, 2)会返回 2×2 的axes数组可以用axes[0, 0]、axes[1, 1]精确指定绘图位置。整张看板可以用fig.suptitle()设置总标题各子图再分别设置自己的问题标题。这样比连续创建四张独立图片更容易形成一个完整的分析故事。三、折线图与柱状图折线图适合有天然顺序的数据尤其是时间序列fig, ax plt.subplots() ax.plot( [Mon, Tue, Wed, Thu], [120, 150, 140, 180], markero, labeltransactions, ) ax.set_ylabel(Transactions) ax.legend() ax.grid(True, alpha0.3)时间字段实际绘制前应先转换为datetime并按时间排序。城市、商品类别等无序类别不应强行用折线连接否则视觉上会制造不存在的“变化趋势”。柱状图更适合类别之间的大小比较。这里尤其要区分“人数”和“比例”value_counts()得到数量0/1 指标的mean()可以表示比例。标题和 y 轴必须明确到底展示的是count还是rate。例如 Titanic 的Survived只有 0 和 1因此按舱位分组后求均值就是各舱位的生还率import pandas as pd titanic_demo pd.DataFrame({ Pclass: [1, 1, 2, 2, 3, 3], Survived: [1, 1, 1, 0, 0, 0], }) rate titanic_demo.groupby(Pclass)[Survived].mean() fig, ax plt.subplots() ax.bar(rate.index.astype(str), rate.values) ax.set_ylim(0, 1) ax.set_xlabel(Pclass) ax.set_ylabel(Survival rate)比例图通常建议让 y 轴从 0 开始避免通过截断坐标轴在视觉上夸大组间差异。四、Seaborn让统计图更省事Seaborn 建立在 Matplotlib 之上可以直接使用 DataFrame 的列名绘图同时仍然可以通过ax继续设置标题、坐标轴等细节。import pandas as pd import seaborn as sns df pd.DataFrame({ class: [1, 1, 2, 2, 3, 3], survived: [1, 1, 1, 0, 0, 0], sex: [f, m, f, m, f, m], }) fig, ax plt.subplots() sns.barplot( datadf, xclass, ysurvived, huesex, errorbarNone, axax, ) ax.set_ylabel(Survival rate)hue可以增加一个分类维度例如同时比较“舱位 × 性别”。但类别过多时颜色和图例会迅速变乱此时更适合筛选 Top N、拆图或使用分面。sns.barplot()与普通ax.bar()的一个重要区别是前者可以直接基于原始 DataFrame 对 y 进行统计聚合。estimator决定使用均值等何种统计量errorbar控制误差区间。在学习阶段如果只关注组间均值可以设置errorbarNone正式分析时是否保留误差区间则应根据图表目的决定不能把统计不确定性永久隐藏掉。五、直方图与 countplot 不要混淆直方图针对连续数值通过分箱观察分布形态ages pd.DataFrame({Age: [18, 20, 21, 22, 30, 31, 45, 60]}) sns.histplot(dataages, xAge, bins5, kdeTrue)bins太少会掩盖结构太多又会显得噪声过大需要结合样本量调整。kdeTrue可以叠加平滑密度曲线但不应把平滑曲线理解成原始数据本身。而countplot统计的是分类变量各类别的样本数量sns.countplot(datadf, xclass)因此histplot回答“连续变量如何分布”countplot回答“每个类别有多少样本”。如果想比较两个群体的连续分布还可以给histplot增加hue。不过叠加的类别越多图越难阅读。此时应考虑拆成多个子图而不是不断增加颜色。直方图还可以配合kdeTrue查看平滑后的密度趋势但 KDE 的形状会受到带宽等因素影响不能把它当成真实观测频数。六、散点图观察两个数值变量的关系points pd.DataFrame({ Age: [20, 30, 40, 50], Fare: [10, 80, 30, 120], Survived: [0, 1, 0, 1], }) sns.scatterplot( datapoints, xAge, yFare, hueSurvived, alpha0.6, )散点图主要观察趋势形态、聚类和离群点。数据点很多且重叠时可以降低alpha。需要特别注意图上出现关联只能作为进一步分析的线索相关不等于因果。散点图中的hue同样可以编码第三个变量例如用颜色区分是否生还。如果点数特别多除了透明度还可以先合理抽样或使用更适合高密度数据的表达方式。抽样后的图只能代表抽样数据结论中也要明确这一限制。七、箱线图、小提琴图与热力图箱线图适合比较不同组的中位数、离散程度和潜在离群点小提琴图进一步展示分布的密度形状。sample pd.DataFrame({ group: [A] * 4 [B] * 4, value: [10, 12, 13, 30, 20, 21, 22, 23], }) fig, axes plt.subplots(1, 2, figsize(8, 3)) sns.boxplot(datasample, xgroup, yvalue, axaxes[0]) sns.violinplot(datasample, xgroup, yvalue, axaxes[1]) fig.tight_layout()箱线图阅读时主要关注中位数、上下四分位数、四分位距和须外点。需要注意箱线图中的“离群点”首先只是按照统计规则识别出的极端观测并不自动等于错误数据高票价、大额订单等极端值可能完全真实是否删除仍需回到业务场景判断。小提琴图把箱线统计与密度形态的思路进一步扩展适合观察是否存在偏态、双峰等结构但对于样本量很小的分组平滑后的外形容易让人产生过度解读因此最好同时关注每组样本数。多个数值变量之间的线性相关可以先计算相关矩阵再绘制热力图corr points[[Age, Fare, Survived]].corr() sns.heatmap( corr, annotTrue, fmt.2f, cmapcoolwarm, center0, )对角线恒为 1正负号表示线性相关方向。热力图适合快速寻找线索但不能直接用来证明变量之间存在因果关系。计算相关矩阵前还要确认参与计算的是数值变量。类别编码成数字后虽然也能算相关系数但数字大小是否具有真实的数量意义需要单独判断。例如Pclass的 1、2、3 有顺序含义而把城市 A/B/C 随意编码成 1/2/3 后直接计算 Pearson 相关通常没有合理解释。八、图中标注让关键数据直接可见当图中只有少量关键点或关键柱时可以用annotate()增加说明让读者不需要在坐标轴之间来回估算fig, ax plt.subplots() values [0.63, 0.47, 0.24] bars ax.bar([1, 2, 3], values) for bar, value in zip(bars, values): ax.annotate( f{value:.0%}, xy(bar.get_x() bar.get_width() / 2, value), hacenter, vabottom, )标注的原则仍然是“少而关键”。如果几十个点都贴文字信息密度反而下降。标题适合表达主要结论标注适合强调关键数值图例负责解释颜色或线型三者分工不要重复。九、让图达到“可交付”标准一张业务图至少应让读者快速知道画的是什么、单位是什么、不同颜色代表什么。常用设置包括使用结论型标题而不是只写“柱状图”设置xlabel、ylabel必要时注明单位多系列使用legend()长类别标签适当旋转比例图通常从 0 开始避免视觉夸大多子图使用tight_layout()减少遮挡。完成后可以直接导出图片fig, ax plt.subplots() ax.plot([1, 2, 3], [2, 4, 3]) ax.set_title(Trend Demo) fig.savefig( visualization.png, dpi150, bbox_inchestight, )推荐顺序是创建图 → 绘制 → 美化 → 保存 → 关闭。bbox_inchestight可以减少标题或标签被裁切的问题。十、中文字体与图片显示问题在 Windows 或 Notebook 中绘制中文标题时偶尔会出现方框、乱码或Glyph missing警告。这通常不是数据问题而是当前 Matplotlib 找不到能够显示中文的字体。可以根据电脑已经安装的字体设置候选列表plt.rcParams[font.sans-serif] [ Microsoft YaHei, SimHei, DejaVu Sans ] plt.rcParams[axes.unicode_minus] False字体名称必须与系统中真实安装的字体一致换到 Linux、Colab 或服务器后Windows 字体可能不存在因此发布或部署前需要在目标环境重新检查。axes.unicode_minusFalse主要用于避免坐标轴负号显示异常。另外图片看起来“挤”时不要只增加figsize。应先检查标题、图例、刻度标签是否过长再配合tight_layout()、标签旋转或减少不必要文字解决。图的目标是快速传递信息而不是把所有分析结果同时塞进一张画布。十一、大数据绘图先聚合再展示Notebook 中的 Store Sales 数据量较大这类数据不适合直接把每一行都塞进折线图。更合理的流程是读取必要字段或适量样本 → 解析日期 → 按日期、门店等维度聚合 → 排序 → 绘图。transactions pd.DataFrame({ date: [2026-01-01, 2026-01-01, 2026-01-02], transactions: [100, 120, 150], }) transactions[date] pd.to_datetime(transactions[date]) daily transactions.groupby(date, as_indexFalse)[transactions].sum() fig, ax plt.subplots() sns.lineplot(datadaily, xdate, ytransactions, markero, axax)这里“先聚合”不仅能减少绘图数据量也让每个点具有清晰业务含义。如果为了速度使用nrows只读取文件前若干行那么图表描述必须写明这是样本期或截取数据不能把局部趋势直接当成完整数据集结论。十二、交付前的图表验收一张图准备放进 CSDN、报告或周报前可以快速检查标题能否直接说明图回答的问题x/y 轴是否有名称数量、比例、金额是否注明含义或单位颜色是否确实编码了有用的分类信息图例、标签和中文是否完整可读没有被边界裁切比例尺是否会夸大差异数据是否经过错误排序图中的结论是否超出了数据能够支持的范围导出的 PNG 能否正常打开分辨率是否满足发布需求。这个验收过程比继续堆颜色、阴影和特效更重要。可视化的最终标准是即使读者不看正文也能基本理解这张图在比较什么以及它能够支持什么结论。十三、常见错误总结常见错误正确思路用折线连接无序类别类别比较使用柱状图把直方图和柱状图混为一谈连续变量看 hist类别看 bar/countcountplot当比例图countplot 表示样本数量多子图混用裸plt.plot()明确使用axes[i].plot()图中没有标题、单位和图例先保证读者能独立理解热力图相关直接写成因果相关只作为分析线索只show()不保存交付图使用savefig()总结数据可视化的核心不是掌握多少种图而是建立“问题 → 数据类型 → 图表 → 读图结论”的思考方式。Matplotlib 提供底层布局与精细控制Seaborn 更适合快速绘制基于 DataFrame 的统计图。真正有效的图表应该一眼看懂、含义明确并且不会通过错误的图形选择制造误导。

相关新闻

网络社群文本分析:从NLP到工程实践的技术指南

网络社群文本分析:从NLP到工程实践的技术指南

这类标题和内容组合,通常指向一种将流行文化元素(如偶像团体、粉丝圈术语)与网络梗、谐音或抽象概念进行拼接的创作。对于技术博客而言,核心任务不是解读或传播这类网络迷因,而是将其作为一个案例,探讨如何…

2026/9/14 2:39:04 阅读更多 →
智搜GEO常见问题(FAQ):打消您最后的疑虑

智搜GEO常见问题(FAQ):打消您最后的疑虑

Q1: GEO能保证我的关键词排在AI回答的第一位吗? A: 不能保证固定排名。AI大模型的推荐机制是动态且“千人千面”的,会根据用户的提问方式、设备、历史行为等多种因素综合呈现结果。智搜GEO的目标是最大化提升您的品牌词、产品词在AI回答中的出现概率和频…

2026/9/22 2:16:48 阅读更多 →
Grok Imagine 2.0 API调用指南:精准文生图与批量集成实践

Grok Imagine 2.0 API调用指南:精准文生图与批量集成实践

这次我们来看一个名为 Grok Imagine 2.0 的图像生成项目。它并非一个独立的开源模型,而是由 xAI 公司开发的 Grok 系列模型中的图像生成功能模块。简单来说,你可以把它理解为一个专注于“精准”和“可控”的文生图AI工具,其核心目标是让用户通…

2026/9/23 0:05:09 阅读更多 →

最新新闻

拆解 ROCm 文档仓库:官方文档站背后的 3 条数据流水线与 changelog 自动化

拆解 ROCm 文档仓库:官方文档站背后的 3 条数据流水线与 changelog 自动化

拆解 ROCm 文档仓库:官方文档站背后的 3 条数据流水线与 changelog 自动化 【免费下载链接】legacy-rocm-build AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build 导读 这个仓库是 ROCm 文档站&…

2026/9/24 13:59:32 阅读更多 →
Apache Pulsar 与 Spark Streaming 集成实战:基于 SparkStreamingPulsarReceiver 构建实时流处理应用

Apache Pulsar 与 Spark Streaming 集成实战:基于 SparkStreamingPulsarReceiver 构建实时流处理应用

消息队列后端流处理 【免费下载链接】pulsar Apache Pulsar - distributed pub-sub messaging system 项目地址: https://gitcode.com/gh_mirrors/pulsar28/pulsar 点击查看 免费下载 导读 本文围绕 Apache Pulsar 官方文档中关于 Spark Streaming 适配器的核心内…

2026/9/24 13:59:32 阅读更多 →
IGBT选型实战指南:从工况分析到参数计算与验证

IGBT选型实战指南:从工况分析到参数计算与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 13:59:32 阅读更多 →
PaddleSpeech WaveFlow 声码器波形合成指南:synthesize.py 全流程解析与实战

PaddleSpeech WaveFlow 声码器波形合成指南:synthesize.py 全流程解析与实战

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/24 13:59:32 阅读更多 →
ESP32-S3-N16R8实战指南:存储配置、引脚复用与选型避坑

ESP32-S3-N16R8实战指南:存储配置、引脚复用与选型避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 13:59:32 阅读更多 →
SwiftPM 版本发布笔记全览:从 Swift 5.3 到 6.5 的功能演进与迁移指南

SwiftPM 版本发布笔记全览:从 Swift 5.3 到 6.5 的功能演进与迁移指南

开发工具构建工具 【免费下载链接】swift-package-manager The Package Manager for the Swift Programming Language 项目地址: https://gitcode.com/gh_mirrors/sw/swift-package-manager 点击查看 免费下载 本指南以 swift-package-manager 仓库中的 ReleaseNot…

2026/9/24 13:58:31 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →