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

MATLAB中for循环保存含subplot的图像报错,求解决方案

MATLAB R2020a循环保存含subplot+heatmap图像报错解决

问题场景

在MATLAB R2020a环境下,循环创建包含subplot的图像并保存时触发报错,但保存不含subplot的单张图像时可正常运行。报错提示数组拼接维度不一致,无法定位对应数组。

原代码

clear
clc
close all

%----------------------------
x1 = 1:0.01:3;
r = -1 + (1+1)*rand(1,201);
x1 = x1 + r;

y1 = 1:0.01:3;
r = -1 + (1+1)*rand(1,201);
y1 = y1 + r;

z1 = [1,2,3;4,5,6;7,8,9];

LC = 0

for nn = 1:10
    LC = LC+1
    figure()
    subplot(2,1,1)
    scatter(x1,y1)
    legend('Data')
    subplot(2,1,2)
    xvalues_HM = {'True label 1','True label 2','True label 3'};
    yvalues_HM = {'Mdl label 3','Mdl label 2','Mdl label 1'};
    h = heatmap(xvalues_HM,yvalues_HM,z1);

    txtsave = [num2str(LC)];     
    saveas(gcf,[ txtsave '.png']);
    close all
end

报错信息

Error using alternatePrintPath
Dimensions of arrays being concatenated are not consistent.

Error in alternatePrintPath

Error in print (line 83)
pj = alternatePrintPath(pj);

Error in saveas (line 181)
        print( h, name, ['-d' dev{i}] )

Error in script (line 396)
        saveas(gcf,[ txtsave '.png']);

问题原因

这是MATLAB R2020a的已知Bug:当figure中同时存在subplot和heatmap对象时,saveas/print函数内部处理打印路径时会触发数组维度不匹配的错误,本质是heatmap的渲染逻辑与subplot的布局逻辑冲突导致内部变量拼接失败。

解决方案

提供三种可行修复方案:

方案1:替换saveas为指定参数的print函数

将原代码中的saveas语句替换为:

print(gcf, [txtsave '.png'], '-dpng', '-r300');

通过显式指定输出格式和分辨率,绕过alternatePrintPath的错误逻辑。

方案2:改用tiledlayout替代subplot

tiledlayout是MATLAB R2019b及以后推出的更灵活布局工具,与heatmap兼容性更好。修改循环内的布局代码:

figure()
t = tiledlayout(2,1); % 创建2行1列的布局
nexttile % 激活第一个子图
scatter(x1,y1)
legend('Data')
nexttile % 激活第二个子图
h = heatmap(xvalues_HM,yvalues_HM,z1);

之后保留原saveas语句即可正常运行。

方案3:升级MATLAB版本

该Bug在MATLAB R2021a及以后的版本中已被官方修复,升级版本可直接解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:07:18