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

如何实现可自定义位置、角度与尺寸的旋转子图叠加效果?

如何实现可自定义位置、角度与尺寸的旋转子图叠加效果?

嗨,我懂你想要的效果——就是像你展示的第一张图那样,能自由调整子图的原点位置、旋转角度和尺寸,而你之前用mpl_toolkits.axes_grid1.inset_locator.inset_axes确实没法实现旋转和自定义原点的需求,这就给你一个完美的解决方案!

我们可以直接利用Matplotlib的fig.add_axes()创建独立子图,再结合旋转功能来满足你提出的三个可变参数需求:

实现代码示例

import matplotlib.pyplot as plt
import numpy as np

# 生成测试数据
x = np.linspace(0, 100, 100)
y = np.linspace(0, 100, 100)

# 创建主图
fig, ax = plt.subplots(1, 1, figsize=[8, 8])
ax.plot(x, y, color='blue')

# ---------------------- 可自定义的参数 ----------------------
subplot_left = 0.3    # 子图原点水平位置(主图坐标系0-1范围,0=最左,1=最右)
subplot_bottom = 0.2  # 子图原点垂直位置(主图坐标系0-1范围,0=最下,1=最上)
subplot_width = 0.4   # 子图宽度(占主图宽度的比例)
subplot_height = 0.4  # 子图高度(占主图高度的比例)
rotation_angle = 30   # 子图旋转角度(顺时针为正,单位:度)
# -----------------------------------------------------------

# 创建旋转子图
ax_rot = fig.add_axes([subplot_left, subplot_bottom, subplot_width, subplot_height])
# 设置旋转,以子图中心为旋转点
ax_rot.set_rotation(rotation_angle, rotation_point='center')

# 在子图上绘图并设置范围
ax_rot.plot(x, y, color='red')
ax_rot.set_xlim(0, 80)
ax_rot.set_ylim(0, 80)

plt.show()

参数说明

  • 子图原点位置:通过subplot_left和subplot_bottom调整,取值范围是主图的相对坐标系(0到1),可以精准控制子图在主图上的起始位置
  • 旋转角度:修改rotation_angle即可,正数代表顺时针旋转,负数代表逆时针旋转,完全满足你要的旋转需求
  • 子图尺寸:调整subplot_width和subplot_height,用主图尺寸的比例来定义,轻松改变子图大小

这个方法和你之前用的inset_axes不同,它完全摆脱了固定位置的限制,还能直接添加旋转效果,完美匹配你想要的图展示效果。

备注:内容来源于stack exchange,提问作者EGOR_MIPT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:55:28