本节说明
除
df.plot接口外,pandas 还提供三个独立绘图方法:DataFrame.boxplot()、DataFrame.hist()以及pandas.plotting.scatter_matrix()。它们各自的参数体系更为专一,适合特定分析场景。
1. boxplot() — 箱线图
功能
对 DataFrame 的每一列(或按
by分组)绘制箱线图,展示数据分布的最小值、Q1、中位数、Q3、最大值与异常值。
基本语法
DataFrame.boxplot(column=None, by=None, ax=None, fontsize=None,
rot=0, grid=True, figsize=None, layout=None,
return_type=None)参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
column | str / list | 指定要绘制的列(默认所有数值列) |
by | str / list | 按某列分组绘制箱线图 |
ax | Axes / Axes 列表 | 目标坐标轴 |
fontsize | int / str | 刻度标签字体大小 |
rot | int / float | 刻度标签旋转角度 |
grid | bool | 是否显示网格,默认 True |
figsize | tuple | 图形尺寸 |
layout | tuple | 子图布局 (rows, cols) |
return_type | str | 'axes' / 'dict' / 'both',控制返回值类型 |
示例
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({
'group': np.repeat(['甲', '乙', '丙'], 50),
'score': np.random.randn(150).round(2),
'time': np.random.randint(1, 100, 150)
})
# 1)每列一个箱线图
df[['score', 'time']].boxplot(figsize=(8, 4))
# 2)按分组绘制
df.boxplot(column='score', by='group', figsize=(8, 4))
# 3)多列 × 分组
df.boxplot(column=['score', 'time'], by='group',
layout=(1, 2), figsize=(10, 4))与
df.plot.box()区别
df.plot.box():所有列合并绘制在同一坐标轴上。df.boxplot():默认每列/每组一个独立子图。
2. hist() — 直方图
功能
对 DataFrame 的每一列自动生成一张直方图子图,快速查看所有变量的分布形态。
基本语法
DataFrame.hist(column=None, by=None, grid=True, xlabelsize=None,
xrot=None, ylabelsize=None, yrot=None, ax=None,
figsize=None, bins=10, legend=False, **kwargs)参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
column | str / list | 指定绘制的列(默认全部数值列) |
by | str / list | 按列分组,每组生成一张直方图 |
grid | bool | 是否显示网格,默认 True |
xlabelsize / ylabelsize | int | x / y 轴刻度标签字号 |
xrot / yrot | float | x / y 轴刻度标签旋转角度 |
ax | Axes / ndarray | 目标坐标轴 |
figsize | tuple | 图形尺寸 |
bins | int / sequence | 直方图分箱数,默认 10 |
legend | bool | 是否显示图例,默认 False |
示例
# 1)所有数值列各自一张直方图
df[['score', 'time']].hist(bins=20, figsize=(8, 3))
# 2)按分组绘制
df.hist(column='score', by='group', bins=15, figsize=(10, 3))与
df.plot.hist()区别
df.plot.hist():所有列叠加在同一坐标轴上。df.hist():每列一张独立子图。
3. scatter_matrix() — 散点图矩阵
功能
绘制多变量两两之间的散点图矩阵,对角线显示单变量分布(直方图或核密度图),是非对角线判读变量相关性的利器。
基本语法
pandas.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None,
grid=False, diagonal='hist', marker='.',
density_kwds=None, hist_kwds=None,
range_padding=0.05, **kwargs)参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
frame | DataFrame | - | 数据源(数值列自动参与) |
alpha | float | 0.5 | 散点透明度,避免点重叠遮挡 |
figsize | tuple | None | 图形尺寸 |
ax | Axes | None | 目标坐标轴 |
grid | bool | False | 是否显示网格 |
diagonal | str | 'hist' | 对角线图形类型:'hist' 直方图 / 'kde' 核密度图 |
marker | str | '.' | 散点标记样式 |
density_kwds | dict | None | 传递给 kde 的额外参数 |
hist_kwds | dict | None | 传递给 hist 的额外参数 |
range_padding | float | 0.05 | 对角线图与散点图之间的留白比例 |
示例
from pandas.plotting import scatter_matrix
iris = pd.DataFrame({
'sepal_length': np.random.randn(100),
'sepal_width': np.random.randn(100),
'petal_length': np.random.randn(100),
'petal_width': np.random.randn(100),
})
# 对角线使用直方图
scatter_matrix(iris, alpha=0.7, figsize=(10, 10), diagonal='hist')
# 对角线使用核密度图,并传递额外参数
scatter_matrix(iris, alpha=0.6, diagonal='kde',
density_kwds={'color': 'red'})观察技巧
- 对角线:单变量分布形态。
- 非对角线:两变量散点形态,若呈明显线性趋势则可能存在相关性。
- 配合
df.corr()可进一步量化相关强度。
🔗 相关笔记
- 核心绘图接口:1. DataFrame.plot 与 Series.plot
- 专用统计图形:3. pandas.plotting
- 统计计算:十八、统计与数学计算