如何实现可自定义位置、角度与尺寸的旋转子图叠加效果?
如何实现可自定义位置、角度与尺寸的旋转子图叠加效果?
嗨,我懂你想要的效果——就是像你展示的第一张图那样,能自由调整子图的原点位置、旋转角度和尺寸,而你之前用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
相关产品推荐
相关产品推荐

