You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用matplotlib放大图像指定区域并绘制局部放大效果图

使用matplotlib实现局部区域放大效果

你要的局部放大标注效果可以通过matplotlib自带的mpl_toolkits.axes_grid1.inset_locator模块实现,无需额外安装第三方库,以下是完整实现方案:

实现步骤

  • 先绘制主图内容(支持图像、折线图、散点图等所有matplotlib支持的图表类型)
  • 插入嵌入式子图作为放大窗口,设定窗口的大小和位置
  • 子图内绘制和主图相同的内容,将坐标轴范围限定到你需要放大的区域
  • 调用标注工具绘制主图的放大区域框,以及主图和子图之间的连接线

完整代码示例

这里以加载并放大图像指定区域为例:

import matplotlib.pyplot as plt
from matplotlib import cbook
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, mark_inset

# 加载示例图像,你可以替换为自己的图像读取逻辑,比如plt.imread("your_img.png")
with cbook.get_sample_data("ada.png") as fp:
    img = plt.imread(fp)

fig, ax = plt.subplots(figsize=(8, 6))
# 绘制主图
ax.imshow(img)
ax.axis("off") # 如果不需要坐标轴可以隐藏

# 1. 插入放大子图
# width、height是子图相对于主图的宽度/高度比例,loc指定子图默认锚点位置
axins = inset_axes(ax, width="30%", height="30%", loc="upper right", bbox_to_anchor=(0,0,1,1), bbox_transform=ax.transAxes)
# 2. 子图绘制相同内容,限定放大区域的坐标范围,这里假设放大x从100到200,y从100到200的区域
axins.imshow(img)
axins.set_xlim(100, 200)
axins.set_ylim(200, 100) # 注意图像的y轴从上到下递增,所以范围反过来写
axins.tick_params(labelleft=False, labelbottom=False, left=False, bottom=False) # 隐藏子图坐标轴刻度

# 3. 绘制主图的放大框和连接线
# loc1、loc2指定连接线连接的子图和主图框的两个对角,ec指定边框颜色,lw指定线宽
mark_inset(ax, axins, loc1=2, loc2=4, ec="red", lw=1.5)

plt.show()

参数调整说明

  • 如果是绘制折线/散点等统计图表,只需要把imshow部分替换为你自己的绘图代码,子图和主图绘制相同内容后,调整set_xlim、set_ylim到你要放大的数值范围即可
  • 子图的位置可以调整loc参数:1对应右上角、2对应左上角、3对应左下角、4对应右下角,也可以修改bbox_to_anchor的坐标自定义位置
  • 连接线的连接位置可以调整loc1和loc2的取值,边框的颜色、粗细、线型都可以通过mark_inset的参数修改

内容的提问来源于stack exchange,提问作者user15957418

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:15:01