Matlab中包含两个图表的图窗指定区域局部放大方法咨询
Matlab 双图表图窗指定区域局部放大操作方案
核心逻辑:局部放大操作的作用对象是子图对应的独立坐标区,和图窗内子图数量无关,你只需要定位到要操作的子图坐标区,单独执行放大逻辑即可。
操作步骤
- 第一步:提取fig1中所有子图的坐标区对象
ax_list = findobj(fig1, 'Type', 'axes'); % 输出的ax_list按子图创建顺序倒序排列,可通过索引匹配你要操作的子图,比如ax_1 = ax_list(2), ax_2 = ax_list(1) - 第二步:对指定子图标记待放大区域
假设你要给第一个子图ax_1中x范围[1,2]、y范围[3,4]的区域做放大,先在原区域绘制边界标记:% Position参数格式为[起始x坐标, 起始y坐标, x方向宽度, y方向高度],可自定义边框颜色和粗细 rectangle(ax_1, 'Position', [1, 3, 1, 1], 'EdgeColor', 'r', 'LineWidth', 1.5); - 第三步:插入放大后的小坐标区
在图窗的空闲位置(不要遮挡原有内容)创建小坐标区,用来展示放大后的内容:% Position参数格式为[图窗内x轴相对位置, 图窗内y轴相对位置, 宽度占比, 高度占比],可手动调整到合适位置 ax_zoom = axes(fig1, 'Position', [0.2, 0.6, 0.15, 0.15]); - 第四步:同步原内容到放大区并限定范围
% 复制原坐标区的所有绘图元素到放大坐标区 copyobj(ax_1.Children, ax_zoom); % 限定放大区的坐标范围为你要放大的区域 xlim(ax_zoom, [1, 2]); ylim(ax_zoom, [3, 4]); % 调整放大区样式 box(ax_zoom, 'on'); set(ax_zoom, 'FontSize', 8); - 重复上述第二步到第四步的操作,即可给第二个子图添加局部放大效果,仅需要把操作的坐标区对象替换为第二个子图的
ax_2即可。
完整验证示例
你可以直接运行这段代码,查看双子图场景下的局部放大效果:
% 模拟你已有的带两个子图的fig1 fig1 = figure; ax_1 = subplot(2,1,1); fplot(@sin, [0, 10], 'LineWidth', 1.2); ax_2 = subplot(2,1,2); fplot(@cos, [0, 10], 'LineWidth', 1.2, 'Color', '#D95319'); % 给第一个子图加局部放大:放大x[2,3]、y[0.8,1]的区域 rectangle(ax_1, 'Position', [2, 0.8, 1, 0.2], 'EdgeColor', 'r', 'LineWidth', 1.5); ax_zoom1 = axes(fig1, 'Position', [0.15, 0.72, 0.12, 0.1]); copyobj(ax_1.Children, ax_zoom1); xlim(ax_zoom1, [2, 3]); ylim(ax_zoom1, [0.8, 1]); set(ax_zoom1, 'FontSize', 7); % 给第二个子图加局部放大:放大x[5,6]、y[-1,-0.8]的区域 rectangle(ax_2, 'Position', [5, -1, 1, 0.2], 'EdgeColor', 'b', 'LineWidth', 1.5); ax_zoom2 = axes(fig1, 'Position', [0.65, 0.22, 0.12, 0.1]); copyobj(ax_2.Children, ax_zoom2); xlim(ax_zoom2, [5, 6]); ylim(ax_zoom2, [-1, -0.8]); set(ax_zoom2, 'FontSize', 7);
内容的提问来源于stack exchange,提问作者mina ahmadi
相关产品推荐
相关产品推荐

