本节说明

除 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)

参数说明

参数类型说明
columnstr / list指定要绘制的列(默认所有数值列)
bystr / list按某列分组绘制箱线图
axAxes / Axes 列表目标坐标轴
fontsizeint / str刻度标签字体大小
rotint / float刻度标签旋转角度
gridbool是否显示网格,默认 True
figsizetuple图形尺寸
layouttuple子图布局 (rows, cols)
return_typestr'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)

参数说明

参数类型说明
columnstr / list指定绘制的列(默认全部数值列)
bystr / list按列分组,每组生成一张直方图
gridbool是否显示网格,默认 True
xlabelsize / ylabelsizeintx / y 轴刻度标签字号
xrot / yrotfloatx / y 轴刻度标签旋转角度
axAxes / ndarray目标坐标轴
figsizetuple图形尺寸
binsint / sequence直方图分箱数,默认 10
legendbool是否显示图例,默认 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)

参数说明

参数类型默认值说明
frameDataFrame-数据源(数值列自动参与)
alphafloat0.5散点透明度,避免点重叠遮挡
figsizetupleNone图形尺寸
axAxesNone目标坐标轴
gridboolFalse是否显示网格
diagonalstr'hist'对角线图形类型:'hist' 直方图 / 'kde' 核密度图
markerstr'.'散点标记样式
density_kwdsdictNone传递给 kde 的额外参数
hist_kwdsdictNone传递给 hist 的额外参数
range_paddingfloat0.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() 可进一步量化相关强度。

🔗 相关笔记