Seaborn(一) - Seaborn绘图方法介绍
文章目录
- 一、分布型绘图
- 1. 分布图
- 2. 直方图
- 3. 核密度估计图
- 4. 地毯图
- 5. 经验累积分布函数图
- 6. 双变量分布图
- 二、分类型绘图
- 1. 分类图
- 2. 带状图
- 3. 蜂群图
- 4. 箱线图
- 5. 小提琴图
- 6. 柱形图
- 7. 点图
- 8. 计数图
- 三、矩阵型绘图
- 1. 热力图
- 2. 聚类图
- 四、关系型绘图
- 1. 关系图
- 2. 散点图
- 3. 折线图
- 五、回归型绘图
- 1. 回归图
- 2. 线性模型图
- 六、多图网格
- 1. 分面网格
- 2. 配对网格
- 3. 双变量分布图
- 4. 配对图
一、分布型绘图
1. 分布图
sns.displot() 是 Seaborn 中用于绘制数据分布的高级接口,可灵活生成单变量或双变量的分布可视化,支持通过 kind 参数指定具体绘图类型(如直方图、核密度图、ECDF图等),并集成了分面功能(按行/列拆分多个子图),适合快速探索变量分布特征及多组对比。
分布图方法:
def displot(data=None, *,# Vector variablesx=None, y=None, hue=None, row=None, col=None, weights=None,# Other plot parameterskind="hist", rug=False, rug_kws=None, log_scale=None, legend=True,# Hue-mapping parameterspalette=None, hue_order=None, hue_norm=None, color=None,# Faceting parameterscol_wrap=None, row_order=None, col_order=None,height=5, aspect=1, facet_kws=None,**kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue等参数可直接使用列名。 |
x/y | vector or str | None | 待分析的变量(x为水平轴,y为垂直轴),单变量分布指定x或y,双变量需同时指定。 |
hue | vector or str | None | 分组变量,按类别对分布进行着色区分,便于组间比较。 |
row/col | vector or str | None | 分面变量,按类别将图拆分为多行(row)或多列(col)子图,实现多维度对比。 |
kind | str | 'hist' | 绘图类型: • 'hist':直方图(默认);• 'kde':核密度图;• 'ecdf':经验累积分布函数图;• 'rug':地毯图。 |
rug | bool | False | 是否在坐标轴上添加地毯图(用短线标记数据点位置,增强分布细节)。 |
log_scale | bool or tuple | None | 是否对坐标轴使用对数刻度(单变量为True/False,双变量为(x_log, y_log)元组)。 |
col_wrap | int | None | 当col分面时,指定每行最多显示的子图数量(自动换行)。 |
height/aspect | float | 5/1 | 单个子图的高度(height)和宽高比(aspect,宽度=height×aspect)。 |
2. 直方图
sns.histplot() 专注于绘制单变量或双变量的频数分布直方图,通过将连续数据划分为离散区间(bins),用矩形高度/面积表示区间内数据的频数或频率,直观展示数据的集中趋势、离散程度和分布形态(如对称、偏态等),支持分组叠加、堆叠或并排显示。
直方图方法:
def histplot(data=None, *,# Vector variablesx=None, y=None, hue=None, weights=None,# Histogram computation parametersstat="count", bins="auto", binwidth=None, binrange=None,discrete=None, cumulative=False, common_bins=True, common_norm=True,# Histogram appearance parametersmultiple="layer", element="bars", fill=True, shrink=1,# Histogram smoothing with a kernel density estimatekde=False, kde_kws=None, line_kws=None,# Bivariate histogram parametersthresh=0, pthresh=None, pmax=None, cbar=False, cbar_ax=None, cbar_kws=None,# Hue mapping parameterspalette=None, hue_order=None, hue_norm=None, color=None,# Axes informationlog_scale=None, legend=True, ax=None,# Other appearance keywords**kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 绘图变量(x为水平轴,y为垂直轴),单变量指定其一,双变量同时指定。 |
hue | vector or str | None | 分组变量,按类别着色,区分不同组的分布。 |
stat | str | 'count' | 统计量类型: • 'count':频数(默认);• 'frequency':频率;• 'density':概率密度(总面积=1);• 'probability':概率(总频数=1)。 |
bins | int/str/array | 'auto' | 区间设置:整数指定数量,'auto'自动计算,数组直接指定边界。 |
binwidth | float | None | 区间宽度(指定后忽略bins)。 |
kde | bool | False | 是否叠加核密度估计曲线,增强分布趋势可视化。 |
multiple | str | 'layer' | 多组展示方式: • 'layer':重叠(默认);• 'stack':堆叠;• 'fill':归一化堆叠;• 'dodge':并排。 |
discrete | bool | None | 是否按离散值绘图(True时每个值对应一个区间,无需手动设bins)。 |
cumulative | bool | False | 是否绘制累积分布(展示小于等于当前区间上限的累计值)。 |
3. 核密度估计图
sns.kdeplot() 基于核密度估计(KDE)方法,绘制连续变量的平滑概率密度曲线,无需分箱,能更精准地展示数据分布形态(如单峰/多峰、对称性),支持单变量曲线、双变量等高线/热力图,以及分组对比,是探索连续变量分布的重要工具。
核密度估计图方法:
def kdeplot(data=None, *, x=None, y=None, hue=None, weights=None,palette=None, hue_order=None, hue_norm=None, color=None, fill=None,multiple="layer", common_norm=True, common_grid=False, cumulative=False,bw_method="scott", bw_adjust=1, warn_singular=True, log_scale=None,levels=10, thresh=.05, gridsize=200, cut=3, clip=None,legend=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None,**kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,变量可通过列名指定。 |
x/y | vector or str | None | 连续变量:单变量指定x(垂直密度曲线)或y(水平密度曲线);双变量同时指定(绘制等高线/热力图)。 |
hue | vector or str | None | 分组变量,按类别绘制多条密度曲线并着色,便于组间分布对比。 |
fill | bool | None | 是否填充曲线下方区域(True时增强视觉效果,单变量有效)。 |
bw_method | str/float | 'scott' | 带宽选择方法:'scott'/'silverman'(经典规则)或浮点数(直接指定缩放因子)。 |
bw_adjust | float | 1 | 带宽调整系数(>1更平滑,<1更精细)。 |
multiple | str | 'layer' | 多组叠加方式:'layer'(重叠,默认)、'stack'(堆叠)、'fill'(归一化堆叠)。 |
levels | int/array | 10 | 双变量图中等高线数量或密度阈值(仅x和y同时指定时生效)。 |
cut | float | 3 | 曲线向数据范围外延伸的倍数(默认延伸至均值±3倍标准差外)。 |
clip | tuple | None | 限制绘图范围(如clip=(0, None)仅绘制x≥0区域)。 |
cumulative | bool | False | 是否绘制累积分布曲线(展示小于等于某值的概率)。 |
4. 地毯图
地毯图(rug plot)是一种简洁的分布可视化工具,通过在坐标轴上绘制一系列短小的竖线(单变量)或点(双变量)来标记每个数据点的具体位置,直观展示数据的密集程度和分布范围。它通常不单独使用,而是作为直方图、核密度图等的补充,帮助观察原始数据的分布细节(如是否有聚类、离群点等)。
地毯图方法:
def rugplot(data=None, *, x=None, y=None, hue=None, height=.025, expand_margins=True,palette=None, hue_order=None, hue_norm=None, legend=True, ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue可直接使用列名。 |
x/y | vector or str | None | 待展示的变量:单变量时指定x(在x轴绘制竖线)或y(在y轴绘制横线);双变量时同时指定(在坐标点位置标记)。 |
hue | vector or str | None | 分组变量,按类别对地毯线/点着色,区分不同组的数据分布。 |
height | float | 0.025 | 地毯线的长度(相对于坐标轴高度的比例)。 |
expand_margins | bool | True | 是否自动扩展坐标轴边缘,避免地毯线与图表边界重叠。 |
palette | str/list/dict | None | 用于hue分组的调色板。 |
ax | matplotlib Axes | None | 指定绘图的坐标轴对象,用于嵌入到其他图表中(如叠加在直方图上)。 |
5. 经验累积分布函数图
经验累积分布函数(ECDF)图用于展示数据的累积分布特征,横轴为变量值,纵轴为小于等于该值的样本所占比例(或频数)。与直方图、核密度图不同,ECDF图直接基于原始数据绘制,不依赖分箱或平滑参数,能精确反映数据的累积趋势,便于比较多组数据的分布差异(如中位数位置、分布范围等)。
经验累积分布函数图方法:
def ecdfplot(data=None, *,# Vector variablesx=None, y=None, hue=None, weights=None,# Computation parametersstat="proportion", complementary=False,# Hue mapping parameterspalette=None, hue_order=None, hue_norm=None,# Axes informationlog_scale=None, legend=True, ax=None,# Other appearance keywords**kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 待分析的变量:x为水平轴(常规累积分布),y为垂直轴(旋转90度的累积分布),单变量指定其一即可。 |
hue | vector or str | None | 分组变量,按类别绘制多条累积曲线,便于组间分布对比。 |
stat | str | 'proportion' | 纵轴统计量: • 'proportion':比例(默认,范围0-1);• 'count':频数(范围0-样本量)。 |
complementary | bool | False | 是否绘制互补累积分布(纵轴为大于该值的比例/频数,即1 - 累积比例)。 |
log_scale | bool or tuple | None | 是否对坐标轴使用对数刻度(单变量时为True/False,双变量时为(x_log, y_log)元组)。 |
palette | str/list/dict | None | 用于hue分组的调色板。 |
ax | matplotlib Axes | None | 指定绘图的坐标轴对象,用于自定义布局或子图嵌入。 |
6. 双变量分布图
双变量分布图用于展示两个变量之间的联合分布关系,可同时呈现二者的关联模式(如线性、非线性)和各自的单变量分布特征。Seaborn 中 sns.jointplot() 是绘制双变量分布的常用函数,它在中心区域展示双变量关系(如散点图、核密度图等),并在边缘区域添加两个变量的单变量分布(如直方图、核密度曲线),是探索变量相关性的高效工具。
核密度估计图方法:
def jointplot(data=None, *, x=None, y=None, hue=None, kind="scatter",height=6, ratio=5, space=.2, dropna=False, xlim=None, ylim=None,color=None, palette=None, hue_order=None, hue_norm=None, marginal_ticks=False,joint_kws=None, marginal_kws=None,**kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue可直接使用列名。 |
x/y | vector or str | None | 待分析的两个变量(x为水平轴,y为垂直轴),必须同时指定。 |
hue | vector or str | None | 分组变量,按类别对双变量分布进行着色,区分不同组的关联模式。 |
kind | str | 'scatter' | 中心区域的绘图类型: • 'scatter':散点图(默认);• 'kde':核密度等高线图;• 'hex':六边形 bins 热力图;• 'reg':散点图+线性回归线;• 'resid':残差图。 |
height | float | 6 | 整个图表的高度(英寸)。 |
ratio | int | 5 | 中心区域与边缘区域的高度比例(如5表示中心高度是边缘的5倍)。 |
space | float | 0.2 | 中心区域与边缘区域之间的间距(英寸)。 |
dropna | bool | False | 是否删除包含缺失值的样本(True时仅使用完整数据)。 |
xlim/ylim | tuple | None | 限制x/y轴的显示范围(如xlim=(0, 100))。 |
color | matplotlib color | None | 所有数据点的统一颜色,若指定hue则被忽略。 |
palette | str/list/dict | None | 用于hue分组的调色板。 |
joint_kws | dict | None | 传递给中心区域绘图函数的额外参数(如joint_kws={'s': 50}调整散点大小)。 |
marginal_kws | dict | None | 传递给边缘区域单变量分布函数的额外参数(如marginal_kws={'bins': 20}调整直方图区间)。 |
二、分类型绘图
1. 分类图
分类图用于可视化展示分类变量与数值变量之间的关系,或不同分类变量组合下的数据分布特征。Seaborn 中的 sns.catplot() 是分类可视化的高级接口,通过 kind 参数可灵活生成多种分类图(如带状图、蜂群图、箱线图等),并支持分面功能(按行/列拆分子图),适合快速探索分类数据的分布规律和组间差异。
分类图方法:
def catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, kind="strip",estimator="mean", errorbar=("ci", 95), n_boot=1000, seed=None, units=None,weights=None, order=None, hue_order=None, row_order=None, col_order=None,col_wrap=None, height=5, aspect=1, log_scale=None, native_scale=False,formatter=None, orient=None, color=None, palette=None, hue_norm=None,legend="auto", legend_out=True, sharex=True, sharey=True,margin_titles=False, facet_kws=None, ci=deprecated, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue等参数可直接使用列名。 |
x/y | vector or str | None | 分类变量(通常为x)和数值变量(通常为y),用于展示分类与数值的关系。 |
hue | vector or str | None | 二级分组变量,按类别着色,细化组内差异。 |
row/col | vector or str | None | 分面变量,按类别将图拆分为多行(row)或多列(col)子图,实现多维度对比。 |
kind | str | 'strip' | 绘图类型: • 'strip':带状图(默认);• 'swarm':蜂群图;• 'box':箱线图;• 'violin':小提琴图;• 'bar':柱形图;• 'point':点图;• 'count':计数图。 |
estimator | callable | 'mean' | 用于汇总数值变量的统计函数(如np.mean、np.median),适用于柱形图、点图等。 |
order/hue_order | list | None | 指定x(order)或hue(hue_order)的类别展示顺序。 |
col_wrap | int | None | 当col分面时,指定每行最多显示的子图数量(自动换行)。 |
height/aspect | float | 5/1 | 单个子图的高度(height)和宽高比(aspect,宽度=height×aspect)。 |
sharex/sharey | bool | True | 分面时是否共享x轴(sharex)或y轴(sharey)刻度。 |
2. 带状图
带状图(strip plot)是一种基础的分类可视化工具,通过在分类轴上随机分布的点展示数值变量的分布,每个点代表一个样本。它能直观呈现数据的原始分布和重叠情况,但当数据量较大时可能出现点的过度重叠,掩盖分布细节,此时可配合jitter参数调整点的分散程度。
带状图方法:
def stripplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,jitter=True, dodge=False, orient=None, color=None, palette=None,size=5, edgecolor=default, linewidth=0,hue_norm=None, log_scale=None, native_scale=False, formatter=None, legend="auto",ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定点的分布方向。 |
hue | vector or str | None | 分组变量,按类别对点着色,区分不同组的数据。 |
jitter | bool/float | True | 是否添加随机抖动(避免点重叠):True为自动抖动,浮点数指定抖动幅度。 |
dodge | bool | False | 当使用hue时,是否将不同组的点沿分类轴分开(避免重叠)。 |
size | float | 5 | 点的大小。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
3. 蜂群图
蜂群图(swarm plot)是带状图的改进版,通过算法将点沿分类轴分散排列,既保留原始数据点的位置信息,又避免重叠,能更清晰地展示数值变量在每个分类下的分布密度和范围。适合中等数据量(数据量过大时可能运行缓慢或拥挤)。
蜂群图方法:
def swarmplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,dodge=False, orient=None, color=None, palette=None,size=5, edgecolor=None, linewidth=0, hue_norm=None, log_scale=None,native_scale=False, formatter=None, legend="auto", warn_thresh=.05,ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定蜂群的分布方向。 |
hue | vector or str | None | 分组变量,按类别对点着色,区分组内差异。 |
dodge | bool | False | 当使用hue时,是否将不同组的蜂群沿分类轴分开(避免重叠)。 |
size | float | 5 | 点的大小(过大会导致拥挤)。 |
warn_thresh | float | 0.05 | 数据点拥挤程度的警告阈值(超过时提示可能影响可视化效果)。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
4. 箱线图
箱线图(box plot)通过四分位数概括数值变量在分类下的分布特征,箱体展示第25%(Q1)、中位数(Q2)、第75%(Q3)分位数,箱须延伸至1.5×IQR(四分位距,Q3-Q1)范围内的最值,超出部分标记为离群点。适合快速比较多组数据的集中趋势、离散程度和异常值。
箱线图方法:
def boxplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,orient=None, color=None, palette=None, saturation=.75, fill=True,dodge="auto", width=.8, gap=0, whis=1.5, linecolor="auto", linewidth=None,fliersize=None, hue_norm=None, native_scale=False, log_scale=None, formatter=None,legend="auto", ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定箱线图的方向。 |
hue | vector or str | None | 分组变量,按类别绘制多个箱体(同一分类下),细化组内差异。 |
dodge | bool/str | 'auto' | 当使用hue时,是否将箱体沿分类轴分开('auto'自动判断,True强制分开)。 |
whis | float | 1.5 | 箱须长度的倍数(whis×IQR),控制离群点的判断阈值。 |
width | float | 0.8 | 箱体的宽度比例。 |
fliersize | float | None | 离群点的大小。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
5. 小提琴图
小提琴图(violin plot)结合了箱线图和核密度图的特点,通过对称的“小提琴”形状展示数值变量在分类下的概率密度分布(宽度代表密度),内部可添加箱线图或四分位线,既呈现分布形态(如单峰/多峰),又展示统计分位数,适合复杂分布的组间对比。
小提琴图方法:
def violinplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,orient=None, color=None, palette=None, saturation=.75, fill=True,inner="box", split=False, width=.8, dodge="auto", gap=0,linewidth=None, linecolor="auto", cut=2, gridsize=100,bw_method="scott", bw_adjust=1, density_norm="area", common_norm=False,hue_norm=None, formatter=None, log_scale=None, native_scale=False,legend="auto", scale=deprecated, scale_hue=deprecated, bw=deprecated,inner_kws=None, ax=None, **kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定小提琴的方向。 |
hue | vector or str | None | 分组变量,按类别区分小提琴的颜色或结构。 |
inner | str | 'box' | 小提琴内部的统计标记: • 'box':箱线图(默认);• 'quartile':四分位线;• 'point'/'stick':点或线标记样本。 |
split | bool | False | 当hue为二分类时,是否将小提琴从中间分开(左右分别对应两个类别)。 |
bw_method/bw_adjust | str/float | 'scott'/1 | 核密度估计的带宽方法('scott'/'silverman')和调整系数(>1更平滑)。 |
density_norm | str | 'area' | 密度归一化方式: • 'area':每个小提琴总面积为1;• 'count':面积与样本量成正比;• 'width':最大宽度统一。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
6. 柱形图
柱形图(bar plot)通过矩形条的高度展示数值变量在分类下的汇总统计量(如均值、中位数),并附带误差线(如置信区间),适合比较不同分类的中心趋势差异。矩形条的长度代表统计量大小,误差线反映结果的不确定性。
柱形图方法:
def barplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,estimator="mean", errorbar=("ci", 95), n_boot=1000, seed=None, units=None,weights=None, orient=None, color=None, palette=None, saturation=.75,fill=True, hue_norm=None, width=.8, dodge="auto", gap=0, log_scale=None,native_scale=False, formatter=None, legend="auto", capsize=0, err_kws=None,ci=deprecated, errcolor=deprecated, errwidth=deprecated, ax=None, **kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定柱形的方向。 |
hue | vector or str | None | 分组变量,按类别绘制多个柱形(同一分类下),细化组内差异。 |
estimator | callable | 'mean' | 汇总统计函数(如np.mean计算均值,np.median计算中位数)。 |
errorbar | str/tuple | ('ci', 95) | 误差线类型: • ('ci', 95):95%置信区间(默认);• 'sd':标准差;• None:不显示误差线。 |
width | float | 0.8 | 柱形的宽度比例。 |
dodge | bool/str | 'auto' | 当使用hue时,是否将柱形沿分类轴分开(避免重叠)。 |
capsize | float | 0 | 误差线顶端/底端的横线长度。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
7. 点图
点图(point plot)用点标记数值变量在分类下的汇总统计量(如均值),并通过误差线展示不确定性,同时可添加连线连接相关组别(如同一hue分类),强调组间趋势或差异。适合突出中心趋势的比较,尤其适用于多组时序或有序分类数据。
点图方法:
def pointplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,estimator="mean", errorbar=("ci", 95), n_boot=1000, seed=None, units=None,weights=None, color=None, palette=None, hue_norm=None, markers=default,linestyles=default, dodge=False, log_scale=None, native_scale=False,orient=None, capsize=0, formatter=None, legend="auto", err_kws=None,ci=deprecated, errwidth=deprecated, join=deprecated, scale=deprecated,ax=None, **kwargs,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 分类变量(x或y)和数值变量(对应另一个轴),确定点的分布方向。 |
hue | vector or str | None | 分组变量,按类别用不同颜色/标记的点区分,连线可连接同hue组别。 |
estimator | callable | 'mean' | 汇总统计函数(如均值、中位数)。 |
errorbar | str/tuple | ('ci', 95) | 误差线类型(同柱形图,如95%置信区间、标准差)。 |
markers | list | default | 不同hue组的点标记样式(如['o', 's']表示圆圈、正方形)。 |
linestyles | list | default | 不同hue组的连线样式(如['-', '--']表示实线、虚线)。 |
dodge | bool | False | 当使用hue时,是否将点沿分类轴错开(避免重叠)。 |
capsize | float | 0 | 误差线顶端/底端的横线长度。 |
8. 计数图
计数图(count plot)是一种特殊的柱形图,用于统计每个分类下的样本数量(频数),通过柱形高度展示不同类别的观测值个数,无需指定数值变量,直接对分类变量的水平进行计数,适合快速了解分类数据的分布频率。
计数图方法:
def countplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,orient=None, color=None, palette=None, saturation=.75, fill=True, hue_norm=None,stat="count", width=.8, dodge="auto", gap=0, log_scale=None, native_scale=False,formatter=None, legend="auto", ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 待计数的分类变量(x为水平柱形,y为垂直柱形)。 |
hue | vector or str | None | 二级分类变量,按类别对柱形分组着色,展示交叉频数。 |
stat | str | 'count' | 统计量类型(目前仅支持'count',即频数)。 |
width | float | 0.8 | 柱形的宽度比例。 |
dodge | bool/str | 'auto' | 当使用hue时,是否将柱形沿分类轴分开(避免重叠)。 |
order/hue_order | list | None | 指定分类变量或hue的类别展示顺序。 |
三、矩阵型绘图
1. 热力图
热力图(heatmap)通过颜色深浅重度直观展示矩阵数据的数值大小,常用于呈现变量间的相关性(如相关系数矩阵)、混淆矩阵或多维数据的分布规律。颜色越深(或越亮)代表数值越大,能快速识别数据中的高值区、低值区及整体模式,是探索变量关联和数据密集程度的有效工具。
热力图方法:
def heatmap(data, *, vmin=None, vmax=None, cmap=None, center=None, robust=False,annot=None, fmt=".2g", annot_kws=None, linewidths=0, linecolor="white",cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels="auto",yticklabels="auto", mask=None, ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame/ndarray | - | 输入的矩阵数据(行和列代表类别或变量,值为待可视化的数值)。 |
vmin/vmax | float | None | 颜色映射的最小值和最大值,超出范围的数值将被截断到边界。 |
cmap | str/list | None | 颜色映射方案(如'viridis'、'coolwarm'、'RdBu'),控制热力图的配色风格。 |
center | float | None | 颜色映射的中心值(用于对称数据,如相关系数矩阵,使正负值颜色区分更明显)。 |
annot | bool | None | 是否在热力图单元格中显示数值(True显示,False不显示)。 |
fmt | str | '.2g' | 数值的格式化字符串(如'd'整数、'.1f'保留1位小数),仅当annot=True时生效。 |
linewidths | float | 0 | 单元格之间的间隔线宽度(>0时添加分隔线,增强网格感)。 |
cbar | bool | True | 是否显示颜色条(用于解释颜色与数值的对应关系)。 |
square | bool | False | 是否强制单元格为正方形(使行列比例一致,增强美观性)。 |
mask | ndarray | None | 布尔矩阵,True对应的单元格将被隐藏(用于突出显示部分数据,如只展示上三角相关矩阵)。 |
xticklabels/yticklabels | str/list/bool | 'auto' | 是否显示x轴/y轴标签:'auto'自动判断,False不显示,列表指定自定义标签。 |
2. 聚类图
聚类图(clustermap)结合了热力图和层次聚类分析,在展示矩阵数据的同时,通过行和列的聚类树(dendrogram)展示变量或样本的相似性结构。它会根据数据相似度对行和列进行重新排序,使相似的类别聚集在一起,便于发现数据中的自然分组和聚类模式,常用于基因表达、样本分类等复杂数据的分析。
聚类图方法:
def clustermap(data, *, pivot_kws=None, method="average", metric="euclidean",z_score=None, standard_scale=None, figsize=None, cbar_kws=None, row_cluster=True,col_cluster=True, row_linkage=None, col_linkage=None, row_colors=None,col_colors=None, mask=None, dendrogram_ratio=(.1, .2),cbar_pos=(.02, .8, .05, .18), tree_kws=None, ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame/ndarray | - | 输入的矩阵数据(行和列代表样本或变量,值为待分析的数值)。 |
method | str | 'average' | 层次聚类的链接方法(计算类间距离的方式): • 'average':平均距离(默认);• 'single':最短距离;• 'complete':最长距离;• 'ward':方差最小化(适用于连续数据)。 |
metric | str | 'euclidean' | 距离度量方法(计算样本/变量间的相似度): • 'euclidean':欧氏距离(默认);• 'correlation':相关系数距离;• 'cityblock':曼哈顿距离等。 |
z_score | int/None | None | 是否对行(z_score=0)或列(z_score=1)进行标准化(将数据转换为z分数,消除量纲影响)。 |
row_cluster/col_cluster | bool | True | 是否对行(row_cluster)或列(col_cluster)进行聚类(False时不聚类,保持原始顺序)。 |
row_linkage/col_linkage | ndarray | None | 预计算的行/列聚类链接矩阵(用于复现特定聚类结果,无需重新计算)。 |
row_colors/col_colors | list/Series | None | 行/列的分组颜色标签(在聚类树旁添加颜色条,标记预设分组,增强聚类解释性)。 |
dendrogram_ratio | tuple | (.1, .2) | 聚类树(行树, 列树)占整个图表的高度/宽度比例。 |
cbar_pos | tuple | (.02, .8, .05, .18) | 颜色条的位置和大小((left, bottom, width, height),相对坐标系)。 |
mask | ndarray | None | 布尔矩阵,True对应的单元格将被隐藏(同热力图)。 |
四、关系型绘图
1. 关系图
关系图用于探索两个或多个变量之间的关联模式,通过可视化展示变量间的相关性(如线性、非线性、正相关、负相关)。Seaborn 中的 sns.relplot() 是关系可视化的高级接口,支持通过 kind 参数指定具体类型(如散点图、折线图),并集成分面功能(按行/列拆分子图),可灵活添加多维度信息(颜色、大小、形状),适合多变量关系的系统性探索。
关系图方法:
def relplot(data=None, *,x=None, y=None, hue=None, size=None, style=None, units=None, weights=None,row=None, col=None, col_wrap=None, row_order=None, col_order=None,palette=None, hue_order=None, hue_norm=None,sizes=None, size_order=None, size_norm=None,markers=None, dashes=None, style_order=None,legend="auto", kind="scatter", height=5, aspect=1, facet_kws=None,**kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue等参数可直接使用列名。 |
x/y | vector or str | None | 待分析的两个核心变量(横轴和纵轴),用于展示基础关系。 |
hue | vector or str | None | 分组变量,按类别对数据点着色,添加第三维度信息。 |
size | vector or str | None | 尺寸变量,按数值大小调整数据点的尺寸,添加第四维度信息。 |
style | vector or str | None | 样式变量,按类别调整数据点的形状或线条样式,添加第五维度信息。 |
row/col | vector or str | None | 分面变量,按类别将图拆分为多行(row)或多列(col)子图,实现多维度对比。 |
kind | str | 'scatter' | 绘图类型: • 'scatter':散点图(默认);• 'line':折线图。 |
palette | str/list/dict | None | 用于hue分组的调色板。 |
sizes | list/tuple | None | 尺寸变量的范围(如(10, 200)表示最小/最大点的大小)。 |
markers | list/bool | None | 样式变量对应的标记符号(如['o', 's']表示圆圈、正方形)。 |
col_wrap | int | None | 当col分面时,指定每行最多显示的子图数量(自动换行)。 |
height/aspect | float | 5/1 | 单个子图的高度(height)和宽高比(aspect,宽度=height×aspect)。 |
2. 散点图
散点图(scatter plot)通过平面上的点(x坐标对应一个变量,y坐标对应另一个变量)展示两个连续变量之间的关系,每个点代表一个样本。它能直观呈现变量间的相关性(如线性趋势、聚类模式)、分布密度及离群点,是探索双变量关系的基础工具。
散点图方法:
def scatterplot(data=None, *,x=None, y=None, hue=None, size=None, style=None,palette=None, hue_order=None, hue_norm=None,sizes=None, size_order=None, size_norm=None,markers=True, style_order=None, legend="auto", ax=None,**kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | 两个连续变量(横轴和纵轴),构成散点图的基础坐标。 |
hue | vector or str | None | 分组变量,按类别对点着色,区分不同组的分布模式。 |
size | vector or str | None | 尺寸变量,按数值大小调整点的大小(数值越大,点越大)。 |
style | vector or str | None | 样式变量,按类别调整点的形状(如圆圈、三角形)。 |
palette | str/list/dict | None | 用于hue分组的调色板。 |
sizes | list/tuple | None | 尺寸范围(如(20, 200)),控制点的大小尺度。 |
markers | list/bool | True | 样式变量对应的标记符号(True使用默认样式,列表指定自定义符号)。 |
legend | str | 'auto' | 图例显示方式:'auto'自动判断,'full'显示完整图例,'brief'简化图例,False不显示。 |
3. 折线图
折线图(line plot)通过连续的线条连接有序数据点,展示变量随时间或另一有序变量的变化趋势,适合呈现数据的动态变化(如时序数据)或分组趋势对比。可通过误差线展示数据的不确定性(如均值的置信区间),增强趋势的可靠性表达。
折线图方法:
def lineplot(data=None, *,x=None, y=None, hue=None, size=None, style=None, units=None, weights=None,palette=None, hue_order=None, hue_norm=None,sizes=None, size_order=None, size_norm=None,dashes=True, markers=None, style_order=None,estimator="mean", errorbar=("ci", 95), n_boot=1000, seed=None,orient="x", sort=True, err_style="band", err_kws=None,legend="auto", ci="deprecated", ax=None, **kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,支持列名直接引用变量。 |
x/y | vector or str | None | x通常为有序变量(如时间),y为随其变化的数值变量,构成折线的横纵轴。 |
hue/size/style | vector or str | None | 分组变量,分别通过颜色、线条粗细、线条样式区分不同组的趋势。 |
estimator | callable | 'mean' | 对同一x值对应的多个y值的汇总函数(如np.mean计算均值,np.median计算中位数)。 |
errorbar | str/tuple | ('ci', 95) | 误差线类型: • ('ci', 95):95%置信区间(默认);• 'sd':标准差;• None:不显示误差线。 |
err_style | str | 'band' | 误差的展示样式:'band'为填充带(默认),'bars'为误差线。 |
sort | bool | True | 是否按x值排序后绘制折线(False保留原始顺序,适合非时序的有序数据)。 |
dashes | list/bool | True | 不同style组的线条样式(True使用默认虚线/实线,列表指定自定义样式如['-', '--'])。 |
markers | list/bool | None | 线条上的数据点标记(None默认不显示,列表指定符号如['o', 's'])。 |
五、回归型绘图
1. 回归图
回归图(regression plot)用于展示两个连续变量之间的线性或非线性关系,并通过拟合回归线直观呈现变量间的趋势,同时可添加置信区间展示模型的不确定性。Seaborn 中的 sns.regplot() 是绘制回归图的基础函数,支持简单线性回归、多项式回归、逻辑回归等多种模型,适合快速探索变量间的关联强度和趋势方向。
回归图方法:
def regplot(data=None, *, x=None, y=None,x_estimator=None, x_bins=None, x_ci="ci",scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None,seed=None, order=1, logistic=False, lowess=False, robust=False,logx=False, x_partial=None, y_partial=None,truncate=True, dropna=True, x_jitter=None, y_jitter=None,label=None, color=None, marker="o",scatter_kws=None, line_kws=None, ax=None
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y可直接使用列名。 |
x/y | vector or str | None | 两个连续变量(横轴和纵轴),用于拟合回归关系。 |
scatter | bool | True | 是否绘制散点图(原始数据点)。 |
fit_reg | bool | True | 是否拟合回归线(False时仅显示散点)。 |
ci | int | 95 | 回归线的置信区间水平(如95表示95%置信区间,None不显示)。 |
order | int | 1 | 多项式回归的阶数(1为线性回归,2为二次曲线,以此类推)。 |
logistic | bool | False | 是否拟合逻辑回归(适用于y为二元变量的情况)。 |
lowess | bool | False | 是否使用局部加权回归(LOWESS)拟合非线性趋势(适合复杂非线性关系)。 |
robust | bool | False | 是否使用稳健回归(减少离群点对回归线的影响)。 |
x_jitter/y_jitter | float | None | 对x/y轴数据添加随机抖动(避免点重叠,增强散点图可读性)。 |
truncate | bool | True | 是否将回归线截断在数据范围内(False时延伸至坐标轴边界)。 |
scatter_kws/line_kws | dict | None | 传递给散点(scatter_kws)或回归线(line_kws)的样式参数(如颜色、大小)。 |
2. 线性模型图
线性模型图(lmplot)是在回归图基础上扩展的高级函数,支持按分组(hue)或分面(row/col)绘制多个回归模型,同时展示不同组别或条件下的变量关系差异。它集成了回归分析与分面可视化,适合多维度探索变量间的线性或非线性关联,尤其适用于比较不同群体的回归趋势。
线性模型图方法:
def lmplot(data, *,x=None, y=None, hue=None, col=None, row=None,palette=None, col_wrap=None, height=5, aspect=1, markers="o",sharex=None, sharey=None, hue_order=None, col_order=None, row_order=None,legend=True, legend_out=None, x_estimator=None, x_bins=None,x_ci="ci", scatter=True, fit_reg=True, ci=95, n_boot=1000,units=None, seed=None, order=1, logistic=False, lowess=False,robust=False, logx=False, x_partial=None, y_partial=None,truncate=True, x_jitter=None, y_jitter=None, scatter_kws=None,line_kws=None, facet_kws=None,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | - | 输入的长格式DataFrame,变量可通过列名指定。 |
x/y | vector or str | None | 两个连续变量,作为回归模型的自变量和因变量。 |
hue | vector or str | None | 分组变量,按类别对数据点和回归线着色,区分不同组的回归趋势。 |
row/col | vector or str | None | 分面变量,按类别将图拆分为多行(row)或多列(col)子图,每个子图对应一组回归模型。 |
col_wrap | int | None | 当col分面时,指定每行最多显示的子图数量(自动换行)。 |
height/aspect | float | 5/1 | 单个子图的高度(height)和宽高比(aspect,宽度=height×aspect)。 |
markers | str/list | 'o' | 不同hue组的散点标记样式(如['o', 's']表示圆圈、正方形)。 |
sharex/sharey | bool | None | 分面时是否共享x轴(sharex)或y轴(sharey)刻度。 |
order/logistic/lowess | 同regplot,分别控制回归阶数、逻辑回归、局部加权回归。 | ||
scatter_kws/line_kws | dict | None | 传递给散点或回归线的样式参数(如scatter_kws={'alpha': 0.5}设置透明度)。 |
facet_kws | dict | None | 传递给分面函数的额外参数(如控制子图间距)。 |
六、多图网格
1. 分面网格
分面网格(FacetGrid)是 Seaborn 中用于创建多子图布局的基础工具,通过将数据按一个或多个分类变量拆分(行 row 或列 col),在网格中生成多个子图,每个子图对应一个分组的数据。它支持灵活设置子图共享坐标轴、尺寸比例、配色等,是实现多维度数据对比可视化的核心组件,常与映射函数(如 map())结合绘制具体图表。
分面网格方法(FacetGrid()类):
def __init__(self, data, *,row=None, col=None, hue=None, col_wrap=None,sharex=True, sharey=True, height=3, aspect=1, palette=None,row_order=None, col_order=None, hue_order=None, hue_kws=None,dropna=False, legend_out=True, despine=True,margin_titles=False, xlim=None, ylim=None, subplot_kws=None,gridspec_kws=None,)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | - | 输入的长格式DataFrame,作为分面的数据源。 |
row/col | vector or str | None | 用于拆分行/列子图的分类变量(每个类别对应一行/列子图)。 |
hue | vector or str | None | 分组变量,在每个子图内部按类别着色,细化组内差异。 |
col_wrap | int | None | 当仅按col分面时,指定每行最多显示的子图数量(自动换行)。 |
sharex/sharey | bool | True | 子图是否共享x轴(sharex)或y轴(sharey)刻度(True共享,False独立)。 |
height/aspect | float | 3/1 | 单个子图的高度(height)和宽高比(aspect,宽度=height×aspect)。 |
row_order/col_order | list | None | 指定row/col变量的类别展示顺序(默认按数据中出现的顺序)。 |
legend_out | bool | True | 是否将hue的图例放置在子图网格外部(避免占用子图空间)。 |
despine | bool | True | 是否移除子图顶部和右侧的边框(美化图表)。 |
margin_titles | bool | False | 是否在子图网格的边缘显示行/列标题(适合长标题)。 |
xlim/ylim | tuple | None | 所有子图的x/y轴范围(如xlim=(0, 10))。 |
2. 配对网格
配对网格(PairGrid)专为多变量数据的两两关系可视化设计,通过创建一个正方形网格,对角线展示单变量分布(如直方图、核密度图),非对角线展示双变量关系(如散点图),适合快速探索数据集内所有变量间的关联模式。支持按hue分组着色,突出不同类别的差异。
配对网格方法(PairGrid()类):
def __init__(self, data, *, hue=None, vars=None, x_vars=None, y_vars=None,hue_order=None, palette=None, hue_kws=None, corner=False, diag_sharey=True,height=2.5, aspect=1, layout_pad=.5, despine=True, dropna=False,)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | - | 输入的DataFrame,包含待分析的多个变量。 |
vars | list | None | 指定参与配对分析的变量列表(默认使用所有数值变量)。 |
x_vars/y_vars | list | None | 分别指定x轴和y轴的变量列表(生成非正方形网格,如x_vars=[A,B], y_vars=[C,D])。 |
hue | vector or str | None | 分组变量,在所有子图中按类别着色,区分不同组的分布。 |
corner | bool | False | 是否仅显示网格的下三角部分(避免重复展示对称的双变量关系,节省空间)。 |
diag_sharey | bool | True | 对角线子图(单变量分布)是否共享y轴刻度(False时独立刻度)。 |
height/aspect | float | 2.5/1 | 单个子图的高度和宽高比(宽度=height×aspect)。 |
layout_pad | float | 0.5 | 子图之间的间距(英寸)。 |
despine | bool | True | 是否移除子图顶部和右侧的边框。 |
3. 双变量分布图
双变量分布图用于同时展示两个变量的联合分布特征,中心区域呈现二者的关联模式(如散点、等高线),边缘区域附加各自的单变量分布(如直方图、核密度曲线),兼顾双变量关系和单变量分布的双重信息。Seaborn 的 sns.jointplot() 是绘制此类图表的便捷函数,适合探索两个连续变量的相关性和分布形态。
核密度估计图方法:
def jointplot(data=None, *, x=None, y=None, hue=None, kind="scatter",height=6, ratio=5, space=.2, dropna=False, xlim=None, ylim=None,color=None, palette=None, hue_order=None, hue_norm=None, marginal_ticks=False,joint_kws=None, marginal_kws=None,**kwargs
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | None | 输入的长格式DataFrame,x/y/hue可直接使用列名。 |
x/y | vector or str | None | 待分析的两个变量(横轴和纵轴),必须同时指定。 |
hue | vector or str | None | 分组变量,按类别对数据点着色,区分不同组的联合分布。 |
kind | str | 'scatter' | 中心区域的绘图类型: • 'scatter':散点图(默认);• 'kde':核密度等高线图;• 'hex':六边形热力图;• 'reg':散点+回归线。 |
height | float | 6 | 整个图表的高度(英寸)。 |
ratio | int | 5 | 中心区域与边缘区域的高度比例(如5表示中心高度是边缘的5倍)。 |
space | float | 0.2 | 中心区域与边缘区域的间距(英寸)。 |
marginal_ticks | bool | False | 是否在边缘区域显示坐标轴刻度。 |
joint_kws/marginal_kws | dict | None | 传递给中心区域(joint_kws)或边缘区域(marginal_kws)的样式参数。 |
4. 配对图
配对图(pair plot)是基于配对网格(PairGrid)的高级接口,自动绘制数据集中所有数值变量的两两关系:对角线为每个变量的单变量分布(如直方图、核密度图),非对角线为两个变量的双变量关系(如散点图),可通过hue分组着色,适合快速概览多变量数据集的分布特征和变量间关联,是探索性数据分析的常用工具。
配对图方法:
def pairplot(data, *,hue=None, hue_order=None, palette=None,vars=None, x_vars=None, y_vars=None,kind="scatter", diag_kind="auto", markers=None,height=2.5, aspect=1, corner=False, dropna=False,plot_kws=None, diag_kws=None, grid_kws=None, size=None,
)
核心参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | DataFrame | - | 输入的DataFrame,包含待分析的多个变量。 |
vars | list | None | 指定参与配对分析的变量列表(默认使用所有数值变量)。 |
x_vars/y_vars | list | None | 分别指定x轴和y轴的变量(生成非对称配对图)。 |
hue | vector or str | None | 分组变量,所有子图按类别着色,区分不同组的分布。 |
kind | str | 'scatter' | 非对角线子图的双变量关系类型:'scatter'(散点图)或'reg'(回归图)。 |
diag_kind | str | 'auto' | 对角线子图的单变量分布类型: • 'auto':默认根据hue是否存在选择(有hue用核密度图,否则用直方图);• 'hist':直方图;• 'kde':核密度图;• None:不绘制对角线。 |
markers | list | None | 不同hue组的散点标记样式(如['o', 's'])。 |
corner | bool | False | 是否仅显示下三角部分(避免重复,同PairGrid)。 |
height/aspect | float | 2.5/1 | 单个子图的高度和宽高比。 |
plot_kws/diag_kws | dict | None | 传递给非对角线(plot_kws)或对角线(diag_kws)子图的样式参数。 |
