如何在Matlab中将不同代码生成的同坐标轴图形合并为单张图
Matlab多图合并解决方案
完全可以通过独立新脚本实现多图合并,不需要修改原有代码,常用有两种实现方案:
方案1:复用原有绘图逻辑(推荐,可维护性最高)
适合你可以直接获取到三组原始绘图代码的场景,不需要生成中间文件:
% 独立合并脚本 % 1. 初始化统一绘图容器 figure ax = axes; hold(ax, 'on'); % 填入你原图形的统一坐标轴参数 xlim(ax, [0 10]); % 替换为你的实际参数 ylim(ax, [-5 5]); % 替换为你的实际参数 xlabel(ax, 'X轴标签'); ylabel(ax, 'Y轴标签'); grid(ax, 'on'); % 2. 依次调用三组原始代码的绘图逻辑,指定在公共坐标轴绘图 % 把原代码里的绘图命令前缀加当前ax参数即可,比如原plot(x1,y1)改成下面的写法 plot(ax, x1, y1, 'r-', 'LineWidth', 1.5, 'DisplayName','第一组数据'); plot(ax, x2, y2, 'b--', 'LineWidth', 1.5, 'DisplayName','第二组数据'); plot(ax, x3, y3, 'g-.', 'LineWidth', 1.5, 'DisplayName','第三组数据'); % 3. 收尾设置 legend(ax, 'show'); hold(ax, 'off');
方案2:读取已保存的.fig文件合并
适合不想修改原始代码、或者原始代码已经丢失,只有已导出的.fig格式图形的场景:
% 独立合并脚本 % 1. 初始化统一绘图容器 new_fig = figure; new_ax = axes(new_fig); hold(new_ax, 'on'); % 填入你原图形的统一坐标轴参数 xlim(new_ax, [0 10]); % 替换为你的实际参数 ylim(new_ax, [-5 5]); % 替换为你的实际参数 xlabel(new_ax, 'X轴标签'); ylabel(new_ax, 'Y轴标签'); grid(new_ax, 'on'); % 2. 批量读取已有fig文件并复制绘图对象 % 替换为你三个fig的实际存储路径 fig_list = {'第一组图.fig','第二组图.fig','第三组图.fig'}; line_styles = {'r-','b--','g-.'}; % 自定义三组数据的样式避免混淆 for i = 1:length(fig_list) % 后台打开旧fig不弹窗 old_fig = openfig(fig_list{i}, 'invisible'); % 提取旧fig里的坐标轴对象 old_ax = findobj(old_fig, 'Type', 'axes'); old_ax = old_ax(1); % 提取所有绘图元素(如果是散点/柱状图,把Type改成scatter/bar即可) draw_objs = findobj(old_ax, 'Type', 'line'); % 复制元素到新画布 for j = 1:length(draw_objs) copyobj(draw_objs(j), new_ax); set(draw_objs(j), 'LineStyle', line_styles{i}, 'DisplayName', ['第' num2str(i) '组数据']); end close(old_fig); end % 3. 收尾设置 legend(new_ax, 'show'); hold(new_ax, 'off');
补充说明
两种方案都完全在独立新脚本中运行,不需要修改你原来的三份绘图代码,因为你原图形的坐标轴参数完全一致,合并后不会出现坐标错位的问题。
内容的提问来源于stack exchange,提问作者Sul At
相关产品推荐
相关产品推荐

