Seaborn 绘图基础
在 Python 的数据可视化生态中Seaborn 是建立在 Matplotlib 之上的高级统计绘图库。它面向数据分析任务提供了更直接的绘图接口能够围绕变量的分布、关系与结构组织图形表达因此特别适合教学入门与探索性数据分析。与只关注“如何画出线、点、柱”不同Seaborn 更强调“数据之间是什么关系、分布如何、组间差异是否明显”。因此学习 Seaborn 的关键不是孤立记忆函数名而是先建立一条清晰主线先明确分析问题再选择图形类型最后完成必要的细节调整。一、什么是 SeabornSeaborn 的核心价值在于它把统计图形的常见需求做了更高层的封装。使用者通常不必从底层图元开始逐步拼装而可以直接以表格数据为基础指定哪些变量映射到横轴、纵轴、颜色或图形结构上。从使用特点看Seaborn 有以下几个方面值得重点把握。1、面向数据集绘图Seaborn 的多数函数可以直接接收 DataFrame并通过 x、y、hue 等参数把数据列映射到图中的不同视觉通道上。这样代码更接近“变量之间的分析关系”而不是“逐个对象如何绘制”。2、更适合统计表达Seaborn 提供的许多图形本身就服务于统计分析。例如• 用直方图与密度曲线观察分布• 用成对关系图观察多个变量之间的关系• 用热力图展示矩阵数据或相关性结构3、默认风格较完整Seaborn 的默认主题、配色和网格设置更适合分析场景。对于教学与报告而言通常可以较快得到结构清楚、视觉统一的图形。4、能与 Matplotlib 配合使用Seaborn 虽然提供了更高层的统计图形接口但它并没有脱离 Matplotlib。实际工作中更常见的方式是1先用 Seaborn 快速绘制图形主体2再用 Matplotlib 调整标题、坐标轴名称、刻度等细节。例如ax sns.histplot(np.random.randn(1000), bins30, kdeTrue)ax.set_title(随机数据分布图)ax.set_xlabel(取值)ax.set_ylabel(频次)plt.show()这种写法说明Seaborn 生成的图形对象仍然可以继续使用 Matplotlib 的方法进行控制。两者配合使用才是最常见也最实用的工作方式。二、Seaborn 的基本使用方式Seaborn 的常见导入方式如下import seaborn as snsimport matplotlib.pyplot as pltimport pandas as pdimport numpy as np如果希望统一图形风格可以先设置主题sns.set_theme(stylewhitegrid)其中stylewhitegrid 表示使用带网格线的浅色背景风格。这种风格在展示统计图形时通常较为清晰。若中文显示异常可添加以下代码# 设置中文字体plt.rcParams[font.sans-serif] [SimHei] # 黑体plt.rcParams[axes.unicode_minus] False # 解决负号显示问题下面先准备一份简单示例数据df pd.DataFrame({ 学习时长: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6], 成绩: [55, 59, 62, 66, 69, 72, 75, 78, 80, 83, 57, 60, 64, 67, 70, 73, 76, 79, 82, 84, 61, 65, 68, 71, 74, 77, 80, 83, 86, 89, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90], 班级: [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B], 性别: [女, 男, 女, 男, 女, 男, 男, 女, 男, 女, 男, 女, 男, 女, 男, 女, 女, 男, 女, 男, 女, 女, 男, 女, 男, 女, 男, 女, 男, 男, 男, 女, 女, 男, 女, 男, 女, 男, 女, 男]})这份数据中学习时长、成绩是数值变量班级、性别是分类变量。Seaborn 很适合处理这种“数值变量 分类变量”并存的表格数据。三、Seaborn 的基本思路先看问题再选图形可以先把常见问题分成三类1、看数据如何分布例如成绩主要集中在哪些范围数据是否偏态是否存在多个峰值。这类问题通常使用直方图、密度图。2、看变量之间的关系例如学习时长与成绩之间是否存在正相关趋势多个特征之间是否存在明显联系不同类别在变量关系上是否分离。这类问题通常使用成对关系图等关系型图形。3、看矩阵型数据或结构关系例如一张成绩表中哪些位置数值高、哪些位置数值低各特征之间的相关性强弱如何。这类问题通常使用热力图。这一划分非常重要。图形不是为了“画得丰富”而是为了服务于分析任务本身。四、频次直方图和密度图分布分析是 Seaborn 中最基础的内容之一。最常用的函数是 histplot()。1、直方图的作用直方图用于观察数值型数据在不同区间中的分布情况。它会把数据划分成若干区间并统计每个区间内有多少观测值。示例data np.random.randn(1000) sns.histplot(data, bins30)plt.show()这张图可以帮助我们观察• 数据主要集中在哪些范围• 分布是否大致对称• 是否存在明显偏态其中bins30 表示把数据范围划分为 30 个区间。2、密度曲线的作用在 Seaborn 中可以通过 kdeTrue 在直方图上叠加一条平滑的核密度估计曲线data np.random.randn(1000) sns.histplot(data, bins30, kdeTrue)plt.show()这里• 柱形部分表示各区间的频次• 平滑曲线表示整体分布趋势与直方图相比密度曲线更适合观察分布形状与纯密度图相比直方图又更能体现离散计数信息。把二者结合起来可以同时把握“局部数量”与“整体轮廓”。3、适用场景直方图与密度曲线特别适合回答以下问题• 一组成绩是否集中在中间分数段• 某变量是否近似服从正态分布• 两组数据的分布是否明显不同如果只是想了解单变量的大致分布通常从 histplot() 开始最合适。五、成对关系图 pairplot当数据集中有多个数值变量时单独逐幅作图会比较繁琐。pairplot() 可以一次性展示多个变量的成对关系是多变量探索分析中非常有代表性的图形。1、基本作用pairplot() 会自动为数值变量建立一个图形网格• 非对角线位置展示变量两两之间的关系• 对角线位置展示单个变量自身的分布示例鸢尾花数据分析iris sns.load_dataset(iris) sns.pairplot(datairis, huespecies)plt.show()这段代码中• datairis 指定输入数据• huespecies 表示用颜色区分不同类别绘制后可以同时看到多个变量之间的散点关系以及每个变量自身的分布情况。2、成对关系图的重要性pairplot() 的价值在于它可以快速帮助我们判断• 哪些变量之间可能存在明显关系• 某些类别是否在变量组合上自然分离• 各变量的分布是否集中或重叠这类图形特别适合数据分析的初步探索阶段。3、pairplot() 常用参数pairplot() 中几个常用参数如下• data输入数据• hue按分类变量分组着色• kind控制非对角线区域的图形类型• diag_kind控制对角线区域的图形类型例如sns.pairplot( datairis, huespecies, kindscatter, diag_kindhist)plt.show()这里表示• 非对角线位置使用散点图• 对角线位置使用直方图4、使用成对关系图时的注意点pairplot() 虽然方便但变量一多图形会迅速变得很大。因此它更适合• 变量数量不太多的数据集• 入门教学中的多变量观察• 初步筛选值得进一步分析的变量组合如果特征很多就应先挑选重点变量再进行绘制。六、热力图 heatmap热力图用于把二维矩阵数据转化为颜色编码图形。它的核心思想是用颜色深浅表示数值大小。在 Seaborn 中heatmap() 是非常重要的基础函数。它通常有两类常见用途一类是展示原始矩阵型数据另一类是展示相关性矩阵。1、用热力图展示数值表例如下面是一张学生成绩表scores pd.DataFrame({ Student_ID: [01, 02, 03, 04, 05], Math: [80, 70, 88, 60, 95], Eng: [85, 75, 80, 65, 90], Phy: [78, 82, 86, 70, 85], Chem: [92, 85, 80, 75, 88], Bio: [88, 90, 85, 72, 92]}).set_index(Student_ID)可以用热力图直接观察数值分布sns.heatmap(scores, annotTrue, fmtd, cmapYlGnBu)plt.show()其中• annotTrue 表示在每个格子中显示具体数值• fmtd 表示按整数格式显示• cmapYlGnBu 表示使用渐变配色方案这类图形适合快速判断• 哪位学生哪些科目成绩较高• 哪些科目整体偏高或偏低• 某些局部位置是否存在突出值2、用热力图展示相关性矩阵热力图的另一类重要用途是展示变量之间的相关系数矩阵。相关性矩阵是把多个变量两两之间的相关系数按行列排成的矩阵其中每个位置表示一对变量之间的相关程度。相关性通常通过计算相关系数得到最常见的是皮尔逊相关系数它衡量两个变量之间线性关系的方向与强弱取值范围一般在 -1 到 1 之间。例如data pd.DataFrame({ A: [1, 2, 3, 4, 5], B: [2, 4, 6, 8, 10], C: [1, 3, 5, 7, 9], D: [5, 4, 3, 2, 1]}) corr_matrix data.corr() sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm)plt.show()读取相关性热力图时应重点看颜色的正负与深浅颜色越接近正相关一侧表示两个变量同向变化越明显越接近负相关一侧表示反向变化越明显越接近中间颜色则说明相关性较弱。这里先通过 data.corr() 计算相关性矩阵再用热力图可视化。这种图形特别适合观察• 哪些变量正相关较强• 哪些变量负相关较强• 哪些变量可能包含较多重复信息3、使用热力图时的注意点热力图适合数值矩阵。如果表中混有编号、姓名等非数值列通常应先把它们设置为索引或剔除再绘图。也就是说不是任何二维表都可以原样直接传给 heatmap()。七、箱线图与小提琴图当研究对象不再是“一个变量整体如何分布”而是“一个数值变量在不同类别之间如何分布”时箱线图与小提琴图就会非常常用。它们都属于分类统计图形适合比较不同组之间的集中趋势、离散程度与分布形态。1、什么是箱线图箱线图用于概括一组数值数据的分布特征。它通常展示中位数、上下四分位数、须以及可能的异常值因此比直方图更强调“统计概括”而不是每个区间中的频数。Seaborn 的 boxplot() 正是用这种方式来比较不同类别下数值变量的分布。例如下面用班级作为分类变量用成绩作为数值变量sns.boxplot(datadf, x班级, y成绩) # df 来自文章最前面的示例数据plt.show()这张图可以帮助我们观察• 哪个班级的成绩中位数更高• 哪个班级的成绩波动更大• 是否存在明显偏离总体范围的异常值2、箱线图的适用场景箱线图特别适合做组间比较。如果重点是回答“不同班级的成绩整体水平是否不同”“哪一组更稳定”“是否有异常值”那么箱线图通常比直方图更紧凑也更便于并排比较。也可以加入分组变量例如sns.boxplot(datadf, x班级, y成绩, hue性别)plt.show()这样就能在同一类别下进一步比较子组差异。Seaborn 的分类图体系本身就支持这种按分类变量分层比较的表达方式。3、什么是小提琴图小提琴图与箱线图作用相近也用于比较不同类别下数值变量的分布但它不仅给出统计概括还通过核密度估计展示分布轮廓。可以把它理解为箱线图与密度图的一种结合形式。示例sns.violinplot(datadf, x班级, y成绩)plt.show()在这类图中• 中间位置反映数据的集中区域• 外轮廓的宽窄反映该数值区间的数据密集程度• 图形越宽通常表示该位置附近的数据越集中4、小提琴图的适用场景箱线图强调统计摘要小提琴图则更强调分布形状。如果仅看箱线图我们能知道中位数和四分位范围但不容易看出分布是否呈双峰、是否在某些区间更密集。小提琴图能够把这些形状信息显示出来因此在比较不同类别分布轮廓时往往更直观。例如sns.violinplot(datadf, x班级, y成绩, hue性别)plt.show()这类图不仅能比较组间高低还能帮助判断各组内部的分布形态是否相似。八、其它常用统计图形简介前面介绍的是入门阶段最核心的几类图形。除此之外Seaborn 还提供了若干常用统计图形下面作简要说明。1、散点图scatterplot() 用于观察两个数值变量之间的关系。图中的每一个点通常对应一条观测记录因此它特别适合用来判断变量之间是否存在某种趋势、聚集现象或组间差异。2、折线图lineplot() 用于观察一个变量随另一个变量变化的趋势常见于时间序列、阶段变化和实验过程数据。它适合回答“总体趋势如何变化”这类问题。3、分类散点图这两类图都用于展示分类变量下的原始观测值。stripplot() 通过抖动减少点重叠swarmplot() 则尽量让点彼此不重叠更适合样本量不太大时精细展示每个观测值。4、条形统计图barplot() 用于比较不同类别上的统计估计值例如均值及其误差范围。它不是简单统计个数而是围绕某个数值变量进行聚合后再绘图。5、计数图countplot() 用于统计各类别中观测值的数量。可以把它理解为“面向分类变量的频数图”适合看各类别样本数是否均衡。6、联合分布图jointplot() 用于同时展示两个变量的关系及各自的边际分布。中间区域通常展示双变量关系边缘区域展示单变量分布适合做更紧凑的双变量探索分析。7、回归图regplot() 用于在散点关系基础上加入回归趋势线帮助观察两个变量之间是否存在明显线性趋势。它适合作为散点图的补充。 小结Seaborn 是建立在 Matplotlib 之上的统计绘图库适合用简洁方式完成分布分析、变量关系分析、矩阵数据展示和类别比较。入门阶段应重点掌握直方图、成对关系图、热力图、箱线图与小提琴图并理解不同图形分别服务于什么分析问题。“点赞有美意赞赏是鼓励”
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2491093.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!