现在位置: 首页 > Matplotlib 教程 > 正文

Matplotlib 采用函数

Matplotlib 是 Python 中最广泛使用的数据可视化库,支持创建静态、动态和交互式图表。

本文档完整整理了 Matplotlib 所有公开接口的函数和方法,方便快速查阅对应的功能与用法。


两大编程接口

Matplotlib 提供了两种使用方式,适用于不同场景。

特性 Axes 接口(显式/面向对象) pyplot 接口(隐式/函数式)
使用方式 先创建 Figure 和 Axes 对象,再调用对象方法 直接调用 pyplot 模块函数,隐式操作当前图表
适用场景 复杂图表、多子图、需要精细控制 快速绘图、交互式探索、简单图表
代码示例 fig, ax = plt.subplots(); ax.plot(x, y) plt.plot(x, y); plt.title("标题")
推荐程度 推荐(更清晰、更可控) 适合简单场景和快速原型

Axes 接口是官方推荐的编程方式,代码逻辑更清晰,在处理多子图和复杂图表时不易出错。为了方便速查,下文同时列出 pyplot 函数和对应的 Axes 方法。


pyplot 模块 - 全部函数列表

pyplot 是 Matplotlib 的顶层接口,提供类似 MATLAB 的绘图体验。以下按官方分类列出所有函数。

1. Figure 与 Axes 管理

创建和管理 Figure(画布)与 Axes(坐标系/子图)的函数。

函数功能说明
figure()创建新的 Figure 或激活已有 Figure
subplots()推荐 创建 Figure 和一组 Axes 子图
subplot()添加单个子图到当前 Figure(按行列索引)
subplot2grid()在网格布局的指定位置创建子图
subplot_mosaic()使用标签字符串创建复杂非均匀布局
axes()在当前 Figure 中添加一个 Axes
gca()获取当前 Axes 对象
gcf()获取当前 Figure 对象
sca()设置当前 Axes
cla()清除当前 Axes
clf()清除当前 Figure
close()关闭 Figure 窗口
delaxes()从 Figure 中移除指定的 Axes
fignum_exists()检查指定编号的 Figure 是否存在
get_figlabels()返回所有 Figure 的标签列表
get_fignums()返回所有 Figure 的编号列表
twinx()创建共享 x 轴的双 y 轴
twiny()创建共享 y 轴的双 x 轴

2. 基本绘图

最常用的图表类型绘制函数。

函数功能说明
plot()绘制折线图(最常用)
scatter()绘制散点图,支持大小/颜色/透明度映射
bar()绘制垂直柱状图
barh()绘制水平柱状图
bar_label()在柱状图的柱子上添加数值标签
grouped_bar()绘制分组柱状图
pie()绘制饼图
pie_label()在饼图上添加标签
stem()绘制茎叶图(火柴杆图)
eventplot()绘制事件图(多条水平线标记事件位置)
step()绘制阶梯图
fill()绘制填充多边形
fill_between()填充两条水平曲线之间的区域
fill_betweenx()填充两条垂直曲线之间的区域
stackplot()绘制堆叠面积图
broken_barh()绘制水平断条图(甘特图风格)
vlines()绘制垂直参考线
hlines()绘制水平参考线
errorbar()绘制带误差棒的折线图
loglog()双对数坐标折线图
semilogx()x 轴对数坐标折线图
semilogy()y 轴对数坐标折线图
polar()在极坐标系中绘图

3. 跨度线(Spans)

绘制水平和垂直的参考线与着色区域。

函数功能说明
axhline()添加横跨 Axes 的水平线
axhspan()添加横跨 Axes 的水平着色带
axvline()添加纵跨 Axes 的垂直线
axvspan()添加纵跨 Axes 的垂直着色带
axline()添加通过两点的无限长直线

4. 频谱分析

用于信号处理和频谱可视化的函数。

函数功能说明
acorr()绘制自相关图
xcorr()绘制互相关图
angle_spectrum()绘制角度频谱
magnitude_spectrum()绘制幅度频谱
phase_spectrum()绘制相位频谱
psd()绘制功率谱密度
csd()绘制互谱密度
cohere()绘制相干性
specgram()绘制频谱图(时频图)

5. 统计图

绘制统计分布相关的图表。

函数功能说明
boxplot()绘制箱线图
violinplot()绘制小提琴图
ecdf()绘制经验累积分布函数(ECDF)

6. 分箱与直方图

函数功能说明
hist()绘制一维直方图
hist2d()绘制二维直方图
hexbin()绘制六边形分箱图
stairs()绘制阶梯直方图(新版,替代 hist 的 step 模式)

7. 等高线

函数功能说明
contour()绘制等高线
contourf()绘制填充等高线
clabel()给等高线添加标签

8. 二维数组与图像

展示二维数据、矩阵和图像的可视化函数。

函数功能说明
imshow()显示图像或二维数组(热力图)
matshow()将矩阵显示为新 Figure 中的图像
pcolor()绘制伪彩色网格图(创建 PolyCollection)
pcolormesh()绘制伪彩色网格图(创建 QuadMesh,性能更好)
spy()绘制稀疏矩阵的非零元素图案
figimage()在 Figure 级别(非 Axes)放置图像

9. 非结构化三角网格

函数功能说明
triplot()绘制非结构化三角网格
tripcolor()绘制三角网格伪彩色图
tricontour()在三角网格上绘制等高线
tricontourf()在三角网格上绘制填充等高线

10. 文本与标注

函数功能说明
text()在 Axes 指定坐标添加文本
figtext()在 Figure 指定位置添加文本
annotate()添加带箭头的标注
arrow()添加箭头
legend()在 Axes 中添加图例
figlegend()在 Figure 级别添加图例
table()在 Axes 中添加表格

11. 矢量场

函数功能说明
quiver()绘制矢量场(箭头图)
quiverkey()给矢量场添加图例标尺
barbs()绘制风羽图(气象学中表示风速和风向)
streamplot()绘制流线图

12. 坐标轴配置

设置坐标轴范围、刻度、标签和比例的函数。

函数功能说明
title()设置 Axes 标题
suptitle()设置 Figure 总标题
xlabel()设置 x 轴标签
ylabel()设置 y 轴标签
xlim()获取或设置 x 轴范围
ylim()获取或设置 y 轴范围
xscale()设置 x 轴比例(linear/log/symlog/logit...)
yscale()设置 y 轴比例(linear/log/symlog/logit...)
xticks()获取或设置 x 轴刻度位置和标签
yticks()获取或设置 y 轴刻度位置和标签
tick_params()调整刻度外观(方向、颜色、大小、标签旋转等)
ticklabel_format()设置刻度标签的格式(科学计数法等)
locator_params()控制刻度定位器的参数
minorticks_on()显示次要刻度
minorticks_off()隐藏次要刻度
rgrids()获取或设置极坐标图的径向网格线
thetagrids()获取或设置极坐标图的角度网格线
grid()开启或关闭网格线
axis()获取或设置某些轴属性的便捷函数
box()开启或关闭 Axes 的边框线
autoscale()自动缩放坐标轴以适应数据

13. 布局

控制子图排列和间距的函数。

函数功能说明
subplots_adjust()手动调整子图间距(left/right/top/bottom/wspace/hspace)
tight_layout()自动调整子图参数使之紧凑排列
margins()设置或获取坐标轴的数据边距
subplot_tool()启动交互式子图调整工具窗口

14. 颜色映射

与 colormap 和颜色条相关的函数。

函数功能说明
colorbar()添加颜色条
clim()设置颜色映射的数据范围
get_cmap()获取指定名称的 colormap 对象
set_cmap()设置默认 colormap
gci()获取当前可映射颜色的图像对象
sci()设置当前可映射颜色的图像对象
imread()从文件读取图像到数组
imsave()将数组保存为图像文件
colormapscolormap 注册表对象
color_sequences颜色序列注册表对象

15. 配置

管理 Matplotlib 全局配置参数的函数。

函数功能说明
rc()设置 rc 参数(可批量设置)
rc_context()临时设置 rc 参数的上下文管理器
rcdefaults()恢复所有 rc 参数为默认值

16. 输出与交互

控制图表显示、保存和交互模式的函数。

函数功能说明
show()显示所有打开的 Figure
savefig()保存当前 Figure 到文件
draw()强制重新渲染当前 Figure
draw_if_interactive()如果在交互模式则渲染 Figure
pause()暂停指定的秒数(期间处理事件)
ion()开启交互模式
ioff()关闭交互模式
isinteractive()返回当前是否处于交互模式
install_repl_displayhook()安装 REPL 显示钩子(使 Figure 自动显示)
uninstall_repl_displayhook()卸载 REPL 显示钩子
switch_backend()切换后端

17. 其他工具函数

函数功能说明
connect()绑定事件回调函数
disconnect()解绑事件回调函数
ginput()通过鼠标点击获取坐标点
waitforbuttonpress()等待鼠标或键盘按下,返回事件类型
findobj()查找匹配指定条件的 Artist 对象
get()获取 Artist 对象的属性值
getp()获取 Artist 对象的属性(get 的别名)
setp()设置 Artist 对象的属性
get_current_fig_manager()获取当前 Figure 的窗口管理器
new_figure_manager()为指定 Figure 创建新的 Figure 管理器
set_loglevel()设置 Matplotlib 日志级别
xkcd()切换为 xkcd(手绘漫画)风格

Axes 对象 - 全部方法列表

Axes(Axes 对象)代表 Figure 中的一个子图,包含数据、刻度、标签、标题等。以下按官方分类完整列出所有方法。

1. 基本绘图方法

方法功能说明
Axes.plot()折线图
Axes.scatter()散点图
Axes.bar()垂直柱状图
Axes.barh()水平柱状图
Axes.bar_label()在柱子上添加数值标签
Axes.grouped_bar()分组柱状图
Axes.pie()饼图
Axes.pie_label()饼图标签
Axes.stem()茎叶图
Axes.eventplot()事件图
Axes.step()阶梯图
Axes.fill()填充多边形
Axes.fill_between()水平填充区域
Axes.fill_betweenx()垂直填充区域
Axes.stackplot()堆叠面积图
Axes.broken_barh()水平断条图
Axes.vlines()垂直参考线
Axes.hlines()水平参考线
Axes.errorbar()带误差棒折线图
Axes.loglog()双对数坐标
Axes.semilogx()x 轴对数坐标
Axes.semilogy()y 轴对数坐标

2. 跨度线方法

方法功能说明
Axes.axhline()水平参考线
Axes.axvline()垂直参考线
Axes.axhspan()水平着色带
Axes.axvspan()垂直着色带
Axes.axline()通过两点的无限长直线

3. 频谱分析方法

方法功能说明
Axes.acorr()自相关图
Axes.xcorr()互相关图
Axes.angle_spectrum()角度频谱
Axes.magnitude_spectrum()幅度频谱
Axes.phase_spectrum()相位频谱
Axes.psd()功率谱密度
Axes.csd()互谱密度
Axes.cohere()相干性
Axes.specgram()频谱图(时频图)

4. 统计方法

方法功能说明
Axes.boxplot()箱线图
Axes.bxp()从预先计算的统计数据绘制箱线图
Axes.violinplot()小提琴图
Axes.violin()从预先计算的统计数据绘制小提琴图
Axes.ecdf()经验累积分布函数

5. 分箱与直方图方法

方法功能说明
Axes.hist()直方图
Axes.hist2d()二维直方图
Axes.hexbin()六边形分箱图
Axes.stairs()阶梯直方图

6. 等高线方法

方法功能说明
Axes.contour()等高线
Axes.contourf()填充等高线
Axes.clabel()等高线标签

7. 二维数组方法

方法功能说明
Axes.imshow()显示图像/热力图
Axes.matshow()矩阵图像
Axes.pcolor()伪彩色网格(PolyCollection)
Axes.pcolorfast()快速伪彩色(使用 imshow 绘制)
Axes.pcolormesh()伪彩色网格(QuadMesh,推荐)
Axes.spy()稀疏矩阵图案

8. 非结构化三角网格方法

方法功能说明
Axes.triplot()三角网格线
Axes.tripcolor()三角网格伪彩色
Axes.tricontour()三角网格等高线
Axes.tricontourf()三角网格填充等高线

9. 文本与标注方法

方法功能说明
Axes.text()添加文本
Axes.annotate()添加带箭头的标注
Axes.table()添加表格
Axes.arrow()添加箭头
Axes.inset_axes()在 Axes 内创建嵌入子图
Axes.indicate_inset()在父 Axes 上标记嵌入子图区域
Axes.indicate_inset_zoom()标记嵌入子图的放大区域
Axes.secondary_xaxis()添加辅助 x 轴(在另一位置显示相同数据)
Axes.secondary_yaxis()添加辅助 y 轴

10. 矢量场方法

方法功能说明
Axes.quiver()矢量场(箭头图)
Axes.quiverkey()矢量场图例标尺
Axes.barbs()风羽图
Axes.streamplot()流线图

11. 清除方法

方法功能说明
Axes.cla()清除 Axes 中的所有内容
Axes.clear()清除 Axes(与 cla() 相同)

12. 外观方法

方法功能说明
Axes.axis()设置轴可见性或范围
Axes.set_axis_off()隐藏坐标轴
Axes.set_axis_on()显示坐标轴
Axes.set_frame_on()显示 Axes 边框
Axes.get_frame_on()获取边框是否可见
Axes.set_axisbelow()设置网格/刻度是否在数据下方
Axes.get_axisbelow()获取网格/刻度层级
Axes.grid()设置网格线
Axes.get_facecolor()获取 Axes 背景色
Axes.set_facecolor()设置 Axes 背景色

13. 属性循环

方法功能说明
Axes.set_prop_cycle()设置线条颜色/线型等属性的循环

14. 坐标轴与刻度控制

坐标轴访问:

方法功能说明
Axes.xaxis / Axes.yaxis获取 x/y 轴的 Axis 对象(属性)
Axes.get_xaxis() / get_yaxis()获取 x/y 轴的 Axis 对象

坐标轴范围与方向:

方法功能说明
Axes.set_xlim() / get_xlim()设置/获取 x 轴范围
Axes.set_ylim() / get_ylim()设置/获取 y 轴范围
Axes.set_xbound() / get_xbound()设置/获取 x 轴的下界和上界
Axes.set_ybound() / get_ybound()设置/获取 y 轴的下界和上界
Axes.invert_xaxis()反转 x 轴方向
Axes.invert_yaxis()反转 y 轴方向
Axes.xaxis_inverted() / yaxis_inverted()查询轴是否反转
Axes.set_xinverted() / get_xinverted()设置/获取 x 轴是否反转
Axes.set_yinverted() / get_yinverted()设置/获取 y 轴是否反转
Axes.update_datalim()用新数据点扩展数据范围

坐标轴标签与图例:

方法功能说明
Axes.set_xlabel() / get_xlabel()设置/获取 x 轴标签
Axes.set_ylabel() / get_ylabel()设置/获取 y 轴标签
Axes.label_outer()仅保留最外侧子图的刻度标签
Axes.set_title() / get_title()设置/获取 Axes 标题
Axes.legend()添加图例
Axes.get_legend()获取当前图例对象
Axes.get_legend_handles_labels()获取图例的句柄和标签

坐标轴比例:

方法功能说明
Axes.set_xscale() / get_xscale()设置/获取 x 轴比例
Axes.set_yscale() / get_yscale()设置/获取 y 轴比例

自动缩放和边距:

方法功能说明
Axes.autoscale()自动缩放视图以适应数据
Axes.autoscale_view()仅自动缩放视图(不改变边距)
Axes.margins()设置或获取数据边距
Axes.relim()根据当前 Artist 重新计算数据范围
Axes.use_sticky_edges()使用粘性边距
Axes.set_xmargin() / get_xmargin()设置/获取 x 轴边距
Axes.set_ymargin() / get_ymargin()设置/获取 y 轴边距
Axes.set_autoscale_on() / get_autoscale_on()设置/获取是否自动缩放
Axes.set_autoscalex_on() / get_autoscalex_on()设置/获取 x 轴是否自动缩放
Axes.set_autoscaley_on() / get_autoscaley_on()设置/获取 y 轴是否自动缩放

宽高比:

方法功能说明
Axes.set_aspect() / get_aspect()设置/获取坐标轴宽高比('equal'/'auto'/数值)
Axes.set_box_aspect() / get_box_aspect()设置/获取 Axes 盒子宽高比
Axes.apply_aspect()应用当前宽高比设置
Axes.set_adjustable() / get_adjustable()设置/获取可调整的方向('box'/'datalim')

刻度和刻度标签:

方法功能说明
Axes.set_xticks() / get_xticks()设置/获取 x 轴刻度位置
Axes.set_yticks() / get_yticks()设置/获取 y 轴刻度位置
Axes.set_xticklabels() / get_xticklabels()设置/获取 x 轴刻度标签
Axes.set_yticklabels() / get_yticklabels()设置/获取 y 轴刻度标签
Axes.get_xmajorticklabels()获取 x 轴主刻度标签
Axes.get_xminorticklabels()获取 x 轴次刻度标签
Axes.get_ymajorticklabels()获取 y 轴主刻度标签
Axes.get_yminorticklabels()获取 y 轴次刻度标签
Axes.get_xgridlines()获取 x 轴网格线
Axes.get_ygridlines()获取 y 轴网格线
Axes.get_xticklines()获取 x 轴刻度线
Axes.get_yticklines()获取 y 轴刻度线
Axes.xaxis_date()将 x 轴刻度设置为日期格式
Axes.yaxis_date()将 y 轴刻度设置为日期格式
Axes.minorticks_on()显示次要刻度
Axes.minorticks_off()隐藏次要刻度
Axes.ticklabel_format()设置刻度标签格式
Axes.tick_params()调整刻度外观参数
Axes.locator_params()控制刻度定位器参数

15. 单位

方法功能说明
Axes.convert_xunits()使用单位转换器转换 x 值
Axes.convert_yunits()使用单位转换器转换 y 值
Axes.have_units()检查是否有注册的单位转换器

16. 添加 Artist

方法功能说明
Axes.add_artist()添加任意 Artist 对象
Axes.add_child_axes()添加子 Axes
Axes.add_collection()添加 Collection 对象
Axes.add_container()添加 Container 对象
Axes.add_image()添加 AxesImage 对象
Axes.add_line()添加 Line2D 对象
Axes.add_patch()添加 Patch 对象
Axes.add_table()添加 Table 对象

17. 双轴与共享轴

方法功能说明
Axes.twinx()创建共享 x 轴的双 y 轴
Axes.twiny()创建共享 y 轴的双 x 轴
Axes.sharex()与其他 Axes 共享 x 轴
Axes.sharey()与其他 Axes 共享 y 轴
Axes.get_shared_x_axes()获取共享 x 轴的 Grouper 对象
Axes.get_shared_y_axes()获取共享 y 轴的 Grouper 对象

18. Axes 位置

方法功能说明
Axes.get_position() / set_position()获取/设置 Axes 在 Figure 中的位置和大小
Axes.get_anchor() / set_anchor()获取/设置 Axes 的锚点(固定位置)
Axes.get_axes_locator() / set_axes_locator()获取/设置 Axes 定位器回调函数
Axes.get_subplotspec() / set_subplotspec()获取/设置 SubplotSpec 对象
Axes.reset_position()重置 Axes 位置为原始值

19. 异步/事件

方法功能说明
Axes.stale标记 Artist 是否需要重新绘制(属性)
Axes.pchanged()标记属性变化事件
Axes.add_callback()添加属性变化回调
Axes.remove_callback()移除属性变化回调

20. 交互

方法功能说明
Axes.can_pan() / can_zoom()返回是否可以平移/缩放
Axes.set_navigate() / get_navigate()设置/获取导航工具栏是否激活
Axes.set_navigate_mode() / get_navigate_mode()设置/获取导航模式
Axes.start_pan() / drag_pan() / end_pan()平移操作的开始/拖动/结束
Axes.format_coord()格式化工具栏显示的坐标字符串
Axes.format_cursor_data()格式化光标处的数据值
Axes.format_xdata() / format_ydata()格式化 x/y 数据值
Axes.mouseover()判断鼠标是否在 Axes 上
Axes.in_axes()判断点是否在 Axes 内
Axes.contains() / contains_point()判断 Artist 是否包含点
Axes.get_cursor_data()获取光标位置的数据
Axes.get_forward_navigation_events() / set_forward_navigation_events()获取/设置导航事件转发

21. 子元素查询

方法功能说明
Axes.get_children()获取所有子 Artist
Axes.get_images()获取所有图像对象
Axes.get_lines()获取所有折线对象
Axes.findobj()查找匹配条件的子 Artist

22. 绘制

方法功能说明
Axes.draw()渲染 Axes
Axes.draw_artist()绘制单个 Artist(底层方法)
Axes.redraw_in_frame()在框架内重绘
Axes.get_window_extent()获取 Axes 在显示窗口中的边界
Axes.get_tightbbox()获取 Axes 的紧凑边界框
Axes.get_rasterization_zorder() / set_rasterization_zorder()获取/设置光栅化的 zorder 阈值

23. 投影(子类需重写)

方法功能说明
Axes.name投影名称(如 'rectilinear'、'polar')
Axes.get_xaxis_transform() / get_yaxis_transform()获取 x/y 轴变换
Axes.get_data_ratio()获取数据宽高比
Axes.get_xaxis_text1_transform()x 轴底部标签变换
Axes.get_xaxis_text2_transform()x 轴顶部标签变换
Axes.get_yaxis_text1_transform()y 轴左侧标签变换
Axes.get_yaxis_text2_transform()y 轴右侧标签变换

24. 其他方法

方法功能说明
Axes.set()批量设置属性
Axes.zorder获取/设置 zorder(属性)
Axes.get_figure()获取所属的 Figure 对象
Axes.figure所属 Figure 对象(属性)
Axes.remove()从 Figure 中移除自身
Axes.has_data()检查是否有数据
Axes.get_default_bbox_extra_artists()获取边界框计算需额外包含的 Artist
Axes.get_transformed_clip_path_and_affine()获取变换后的裁剪路径
Axes.viewLim视图范围(属性)
Axes.dataLim数据范围(属性)
Axes.spines边框线字典(属性)

Figure 对象 - 全部方法列表

Figure 是整个图表的顶层容器,管理所有的 Axes、Artist 和布局。

1. 添加 Axes 和 SubFigure

方法功能说明
Figure.subplots()推荐 创建 Axes 子图网格
Figure.add_subplot()按行列位置添加单个子图
Figure.add_axes()在指定位置和大小添加 Axes
Figure.subplot_mosaic()使用标签布局创建复杂子图排列
Figure.add_gridspec()添加 GridSpec 布局对象
Figure.subfigures()创建嵌套子 Figure
Figure.add_subfigure()添加单个 SubFigure
Figure.axesAxes 列表(属性)
Figure.get_axes()获取所有 Axes
Figure.delaxes()移除指定的 Axes

2. 保存

方法功能说明
Figure.savefig()保存 Figure 到文件

3. Figure 级标注

方法功能说明
Figure.suptitle() / get_suptitle()设置/获取 Figure 总标题
Figure.supxlabel() / get_supxlabel()设置/获取 Figure 级别 x 标签
Figure.supylabel() / get_supylabel()设置/获取 Figure 级别 y 标签
Figure.colorbar()添加颜色条
Figure.legend()添加全局图例
Figure.text()在 Figure 级别添加文本
Figure.align_labels()对齐所有子图的轴标签
Figure.align_xlabels()对齐所有子图的 x 轴标签
Figure.align_ylabels()对齐所有子图的 y 轴标签
Figure.align_titles()对齐所有子图的标题
Figure.autofmt_xdate()自动旋转日期刻度标签

4. Figure 几何

方法功能说明
Figure.set_size_inches() / get_size_inches()设置/获取 Figure 尺寸(英寸)
Figure.set_figheight() / get_figheight()设置/获取 Figure 高度
Figure.set_figwidth() / get_figwidth()设置/获取 Figure 宽度
Figure.dpiDPI 分辨率(属性)
Figure.set_dpi() / get_dpi()设置/获取 DPI

5. 子图布局

方法功能说明
Figure.subplots_adjust()手动调整子图间距
Figure.set_layout_engine()设置布局引擎('constrained'/'compressed'/'none')
Figure.get_layout_engine()获取当前布局引擎
Figure.tight_layout()自动紧凑布局(已不推荐)
Figure.set_tight_layout() / get_tight_layout()设置/获取 tight_layout(已不推荐)
Figure.set_constrained_layout() / get_constrained_layout()设置/获取 constrained_layout(已不推荐)
Figure.set_constrained_layout_pads() / get_constrained_layout_pads()设置/获取 constrained_layout 边距(已不推荐)

6. 交互

方法功能说明
Figure.ginput()通过鼠标点击获取坐标点
Figure.waitforbuttonpress()等待鼠标或键盘按下
Figure.pick()触发 pick 事件
Figure.add_axobserver()添加 Axes 观察者

7. 外观修改

方法功能说明
Figure.set_frameon() / get_frameon()设置/获取 Figure 背景是否可见
Figure.set_linewidth() / get_linewidth()设置/获取 Figure 边框线宽
Figure.set_facecolor() / get_facecolor()设置/获取 Figure 背景色
Figure.set_edgecolor() / get_edgecolor()设置/获取 Figure 边框颜色

8. 添加和获取 Artist

方法功能说明
Figure.add_artist()添加任意 Artist
Figure.figimage()在 Figure 级别放置图像
Figure.get_children()获取所有子 Artist

9. 状态管理

方法功能说明
Figure.clear()清除 Figure
Figure.gca()获取当前 Axes
Figure.sca()设置当前 Axes
Figure.show()显示 Figure
Figure.draw()渲染 Figure
Figure.draw_artist()绘制单个 Artist
Figure.draw_without_rendering()不渲染地计算布局(用于获取尺寸信息)
Figure.set_canvas()设置画布
Figure.get_tightbbox()获取 Figure 的紧凑边界框
Figure.get_window_extent()获取 Figure 在显示窗口中的边界

10. 辅助函数

函数功能说明
figaspect()根据指定宽高比计算 Figure 尺寸

SubFigure 对象 - 方法列表

SubFigure 是嵌套在父 Figure 内的逻辑子 Figure,拥有与 Figure 类似的方法。

添加 Axes

方法功能说明
SubFigure.subplots()创建子图网格
SubFigure.add_subplot()添加单个子图
SubFigure.add_axes()在指定位置添加 Axes
SubFigure.subplot_mosaic()标签布局子图
SubFigure.add_gridspec()添加 GridSpec
SubFigure.subfigures()创建更深层嵌套的 SubFigure
SubFigure.add_subfigure()添加单个 SubFigure
SubFigure.delaxes()移除 Axes

标注

方法功能说明
SubFigure.suptitle() / get_suptitle()SubFigure 总标题
SubFigure.supxlabel() / get_supxlabel()SubFigure x 标签
SubFigure.supylabel() / get_supylabel()SubFigure y 标签
SubFigure.colorbar()颜色条
SubFigure.legend()图例
SubFigure.text()文本
SubFigure.align_labels()对齐标签
SubFigure.align_xlabels() / align_ylabels()对齐 x/y 标签
SubFigure.align_titles()对齐标题

Artist 与外观

方法功能说明
SubFigure.add_artist()添加 Artist
SubFigure.get_children()获取子 Artist
SubFigure.set_frameon() / get_frameon()设置/获取边框
SubFigure.set_linewidth() / get_linewidth()设置/获取线宽
SubFigure.set_facecolor() / get_facecolor()设置/获取背景色
SubFigure.set_edgecolor() / get_edgecolor()设置/获取边框色
SubFigure.set_dpi() / get_dpi()设置/获取 DPI

样式配置速查

内置样式表

通过 plt.style.use('name') 切换样式。

样式名称风格描述
default默认样式,清晰中性
ggplot模拟 R ggplot2 风格,灰色背景加白色网格
seaborn-v0_8类似 seaborn 库的现代化风格
seaborn-v0_8-brightseaborn 亮色调
seaborn-v0_8-colorblindseaborn 色盲友好色调
seaborn-v0_8-darkseaborn 深色风格
seaborn-v0_8-dark-paletteseaborn 深色调色板
seaborn-v0_8-darkgridseaborn 深色带网格
seaborn-v0_8-deepseaborn 深色调
seaborn-v0_8-mutedseaborn 柔色调
seaborn-v0_8-notebookseaborn notebook 风格
seaborn-v0_8-paperseaborn 论文风格
seaborn-v0_8-pastelseaborn 粉色调
seaborn-v0_8-posterseaborn 海报风格
seaborn-v0_8-talkseaborn 演讲风格
seaborn-v0_8-ticksseaborn 刻度风格
seaborn-v0_8-whiteseaborn 白色背景
seaborn-v0_8-whitegridseaborn 白色带网格
fivethirtyeight模仿 FiveThirtyEight 数据新闻风格
dark_background深色背景,适合演示和夜间使用
bmhBayesian Methods for Hackers 风格
grayscale灰度风格,适合黑白打印
classicMatplotlib v1.x 经典风格
fast简化样式,渲染速度更快
Solarize_Light2Solarized 浅色主题
tableau-colorblind10Tableau 色盲友好调色板

常用 rcParams 配置

参数说明示例值
figure.figsize默认图表尺寸(英寸)[8, 6]
figure.dpi默认分辨率100
figure.facecolorFigure 背景色'white'
figure.edgecolorFigure 边框色'white'
font.size全局字体大小12
font.family字体族'sans-serif'
font.sans-serif无衬线字体列表['DejaVu Sans', ...]
axes.titlesize标题字体大小'large'
axes.labelsize轴标签字体大小'medium'
axes.grid默认是否显示网格False
axes.facecolorAxes 背景色'white'
axes.spines.top是否显示顶部边框True
axes.spines.right是否显示右侧边框True
lines.linewidth默认线宽1.5
lines.markersize默认标记大小6
lines.linestyle默认线型'-'
legend.loc图例默认位置'best'
legend.fontsize图例字体大小'medium'
xtick.labelsizex 轴刻度标签大小'medium'
ytick.labelsizey 轴刻度标签大小'medium'
savefig.dpi保存图片的默认分辨率'figure'
savefig.bbox保存时的边界模式None
image.cmap默认 colormap'viridis'
image.interpolation图像插值方法'antialiased'

colormap(颜色映射)速查

分类colormap 名称适用场景
感知均匀(Sequential)viridis, plasma, inferno, magma, cividis连续数据,色盲友好,推荐首选
顺序(单色渐变)Greys, Purples, Blues, Greens, Oranges, Reds, YlOrBr, YlOrRd, OrRd, PuRd, RdPu, BuPu, GnBu, PuBu, YlGnBu, PuBuGn, BuGn, YlGn从低到高的连续数据,单色调
发散(Diverging)PiYG, PRGn, BrBG, PuOr, RdGy, RdBu, RdYlBu, RdYlGn, Spectral, coolwarm, bwr, seismic有中心参考点的双向数据
循环(Cyclic)twilight, twilight_shifted, hsv周期性数据(如角度、时间)
定性(Qualitative)Pastel1, Pastel2, Paired, Accent, Dark2, Set1, Set2, Set3, tab10, tab20, tab20b, tab20c离散分类数据
杂项flag, prism, ocean, gist_earth, terrain, gist_stern, gnuplot, gnuplot2, CMRmap, cubehelix, brg, gist_rainbow, rainbow, jet, turbo, nipy_spectral, gist_ncar特殊用途或视觉效果

'viridis' 是 Matplotlib 2.0 以来的默认 colormap,具有优秀的感知均匀性和色盲友好特性,是大多数场景的首选。避免使用 'jet''rainbow',它们存在感知失真问题。


常用示例

示例 1:基本折线图与散点图

使用显式 Axes 接口创建包含多条曲线和标注的图表。

实例

import matplotlib.pyplot as plt
import numpy as np

# 生成数据:0 到 10 之间取 100 个等间距点
x = np.linspace(0, 10, 100)
y1 = np.sin(x)   # 正弦函数
y2 = np.cos(x)   # 余弦函数

# 创建 Figure 和 Axes(显式接口,推荐)
fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# 绘制两条折线,设置颜色、线型和标签
ax.plot(x, y1, label='sin(x)', color='blue', linewidth=2)
ax.plot(x, y2, label='cos(x)', color='red', linestyle='--', linewidth=2)

# 在峰值位置添加高亮散点
peak_idx_sin = np.argmax(y1)
peak_idx_cos = np.argmax(y2)
ax.scatter(x[peak_idx_sin], y1[peak_idx_sin],
           color='blue', s=100, zorder=5)
ax.scatter(x[peak_idx_cos], y2[peak_idx_cos],
           color='red', s=100, zorder=5)

# 装饰:标题、轴标签、图例、网格
ax.set_title('Sine and Cosine Functions', fontsize=14)
ax.set_xlabel('x (radians)')
ax.set_ylabel('Amplitude')
ax.legend(loc='upper right')
ax.grid(True, alpha=0.3)

plt.show()
print("runoob: plot displayed successfully")

示例 2:多子图布局(2x2)

展示在一个 Figure 中创建不同类型子图的方法。

实例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

# 创建 2x2 子图(面向对象接口)
fig, axes = plt.subplots(2, 2, figsize=(10, 8), layout='constrained')
fig.suptitle('Multi-panel RUNOOB Demo', fontsize=16)

# 子图 (0,0):折线图
axes[0, 0].plot(x, np.sin(x), color='tab:blue', linewidth=2)
axes[0, 0].set_title('Line Plot')
axes[0, 0].set_ylabel('sin(x)')

# 子图 (0,1):散点图
np.random.seed(42)
colors = np.random.rand(50)
sizes = np.random.rand(50) * 200
axes[0, 1].scatter(np.random.rand(50), np.random.rand(50),
                   c=colors, s=sizes, alpha=0.6, cmap='viridis')
axes[0, 1].set_title('Scatter Plot')

# 子图 (1,0):柱状图(带数值标签)
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]
bars = axes[1, 0].bar(categories, values,
                       color='tab:green', edgecolor='white')
axes[1, 0].bar_label(bars)  # 在柱上显示数值
axes[1, 0].set_title('Bar Chart')

# 子图 (1,1):直方图
data = np.random.randn(1000)
axes[1, 1].hist(data, bins=30, color='tab:orange',
                edgecolor='white', alpha=0.8)
axes[1, 1].axvline(x=0, color='red', linestyle='--', linewidth=2)
axes[1, 1].set_title('Histogram')

plt.show()

示例 3:热力图与等高线对比

展示在同一 Figure 中使用 imshow 和 contourf 两种方式可视化二维数据。

实例

import matplotlib.pyplot as plt
import numpy as np

# 创建二维网格数据
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)  # 二维函数值

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
                                layout='constrained')

# 左图:热力图(imshow)
im = ax1.imshow(Z, extent=[-3, 3, -3, 3], origin='lower',
                cmap='viridis', aspect='auto')
ax1.set_title('Heatmap (imshow)', fontsize=14)
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
fig.colorbar(im, ax=ax1, label='Amplitude', shrink=0.8)

# 右图:填充等高线(contourf)
contour = ax2.contourf(X, Y, Z, levels=15, cmap='RdYlBu')
# 叠加等高线边界
ax2.contour(X, Y, Z, levels=15, colors='black', linewidths=0.5)
ax2.set_title('Filled Contour (contourf)', fontsize=14)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
fig.colorbar(contour, ax=ax2, label='Amplitude', shrink=0.8)

plt.show()

示例 4:样式切换与保存图片

使用样式表和 rcParams 自定义外观,并保存高质量图片。

实例

import matplotlib.pyplot as plt
import numpy as np

# 使用 ggplot 样式,再微调部分参数
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = [8, 6]
plt.rcParams['font.size'] = 12

x = np.linspace(0, 10, 50)
y1 = np.exp(-x/3) * np.sin(2 * x)  # 阻尼正弦波
y2 = np.exp(-x/3) * np.cos(2 * x)  # 阻尼余弦波

fig, ax = plt.subplots()
ax.plot(x, y1, 'o-', label='Damped sin', markersize=6)
ax.plot(x, y2, 's--', label='Damped cos', markersize=6)

# 标注第一个峰值
peak_idx = np.argmax(y1)
ax.annotate(f'Peak: {y1[peak_idx]:.2f}',
            xy=(x[peak_idx], y1[peak_idx]),
            xytext=(x[peak_idx] + 1.5, y1[peak_idx] + 0.15),
            arrowprops=dict(arrowstyle='->', color='gray'),
            fontsize=10)

ax.set_title('Damped Oscillation', fontsize=16)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')
ax.legend()
ax.grid(True)

# 保存为 300 DPI 高质量 PNG
fig.savefig('runoob_damped_oscillation.png',
            dpi=300, bbox_inches='tight')
print("runoob: figure saved successfully")

plt.show()

示例 5:mosaic 复杂布局

使用 subplot_mosaic 创建非均匀子图排列。

实例

import matplotlib.pyplot as plt
import numpy as np

# mosaic 字符串定义布局:
# 'A' 横跨顶部整行,'B'和'C'在左下和左中,'D'纵向占据右下
layout = """
A A A
B C D
"""


fig, axes = plt.subplot_mosaic(layout, figsize=(10, 6),
                                layout='constrained')
fig.suptitle('Complex Mosaic Layout (RUNOOB)', fontsize=16)

# 面板 A:折线图(横跨顶部)
x = np.linspace(0, 10, 100)
axes['A'].plot(x, np.sin(x), label='sin(x)')
axes['A'].plot(x, np.cos(x), label='cos(x)')
axes['A'].set_title('Panel A: Line Plot')
axes['A'].legend()

# 面板 B:饼图
sizes = [30, 25, 20, 15, 10]
labels = ['Python', 'Java', 'C++', 'Rust', 'Go']
axes['B'].pie(sizes, labels=labels, autopct='%1.1f%%',
              startangle=90)
axes['B'].set_title('Panel B: Pie Chart')

# 面板 C:柱状图
axes['C'].bar(['X', 'Y', 'Z'], [10, 25, 15],
              color=['#ff6b6b', '#4ecdc4', '#45b7d1'])
axes['C'].set_title('Panel C: Bar Chart')

# 面板 D:热力图
matrix = np.random.rand(5, 5)
im = axes['D'].imshow(matrix, cmap='Blues', aspect='auto')
axes['D'].set_title('Panel D: Heatmap')
fig.colorbar(im, ax=axes['D'])

plt.show()

示例 6:双 y 轴与嵌入子图

展示 secondary_axis、twinx 和 inset_axes 的用法。

实例

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')

x = np.linspace(0, 10, 100)

# 主图:绘制两条量纲不同的曲线
ax.plot(x, np.sin(x), 'b-', label='sin(x) [amplitude]')
ax.set_xlabel('x (radians)')
ax.set_ylabel('sin(x)', color='blue')
ax.tick_params(axis='y', labelcolor='blue')

# 创建双 y 轴(共享 x 轴)
ax2 = ax.twinx()
ax2.plot(x, np.exp(x/5), 'r--', label='exp(x/5) [growth]')
ax2.set_ylabel('exp(x/5)', color='red')
ax2.tick_params(axis='y', labelcolor='red')

# 在 ax 中添加嵌入子图(放大局部区域)
axins = ax.inset_axes([0.15, 0.5, 0.3, 0.35])
axins.plot(x, np.sin(x), 'b-')
axins.set_xlim(3, 5)
axins.set_ylim(-1.2, 1.2)
axins.set_title('Zoomed Region')
axins.grid(True, alpha=0.3)

# 在主图上标记嵌入区域
ax.indicate_inset_zoom(axins, edgecolor='gray')

ax.set_title('Dual Y-Axes with Inset Zoom', fontsize=14)
plt.show()

常见问题

图表不显示

确认是否调用了 plt.show()

在非交互式后端(如 Agg)下必须显式调用 show()

在 Jupyter Notebook 中,使用 %matplotlib inline 魔法命令确保图表内嵌显示。

刻度太多或顺序错乱

常见原因是将字符串列表当作数据传入(而非数值或日期时间)。

Matplotlib 将字符串列表视为分类变量,每个唯一值一个刻度,且按出现顺序排列。

解决方法:将字符串转换为数值,如 np.asarray(data, dtype='float')np.asarray(data, dtype='datetime64[s]')

中文显示为方框

Matplotlib 默认字体(DejaVu Sans)不含中文字形,需指定支持中文的字体。

设置 plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', ...] 并确保该系统已安装对应字体。

标签重叠或被截断

推荐在创建 Figure 时使用 layout='constrained'layout='compressed' 参数,自动处理标签、标题和图例的重叠问题。

也可使用 fig.tight_layout()fig.subplots_adjust() 手动调整。

pcolor 与 pcolormesh 的区别

pcolor() 创建 PolyCollection,渲染较慢但更精确。

pcolormesh() 创建 QuadMesh,渲染速度更快,是大多数场景的推荐选择。

对于非常大的网格,pcolorfast() 使用 imshow 方式绘制,速度最快但精度最低。


相关资源

  • Matplotlib 官方网站:matplotlib.org
  • 官方图库(Gallery):matplotlib.org/stable/gallery/index.html
  • API 完整参考:matplotlib.org/stable/api/index.html
  • 安装指南:matplotlib.org/stable/install/index.html
  • 贡献指南:matplotlib.org/stable/devel/index.html