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

如何使用arrayfun调用set函数设置双Y轴的属性?

用arrayfun批量设置Matlab双轴图的Y轴范围

我来帮你搞定这个问题~你遇到的语法错误,本质是匿名函数里不能直接执行赋值语句(比如x.YAxis(1).Limits = [0 y1max]这种写法在匿名函数里是不被允许的),而set函数刚好能解决这个痛点——它可以把属性设置转化为函数调用的形式,完美适配arrayfun的使用场景。

1. 批量设置单个Y轴(比如所有图的第一个Y轴)

如果你想给所有双轴图的第一个Y轴统一设置范围,用arrayfun结合set的写法如下:

% 假设你已经定义了目标范围和轴对象数组ax
y1max = 100; % 示例最大值
arrayfun(@(x) set(x.YAxis(1), 'Limits', [0 y1max]), ax, 'UniformOutput', false);

这里的逻辑很清晰:

  • @(x)定义了匿名函数的输入是单个轴对象x
  • set(x.YAxis(1), 'Limits', [0 y1max])就是给当前轴的第一个Y轴设置范围
  • 'UniformOutput', false是因为set没有返回值,需要关闭统一输出要求

2. 同时批量设置两个Y轴

如果需要同时给每个双轴图的两个Y轴都设置范围,只需要在匿名函数里连续调用两次set即可:

% 先定义两个Y轴的目标范围
y1_lims = [0 100]; % 第一个Y轴的范围
y2_lims = [0 500]; % 第二个Y轴的范围

% 批量设置所有轴的两个Y轴
arrayfun(@(x) ...
    begin
        set(x.YAxis(1), 'Limits', y1_lims);
        set(x.YAxis(2), 'Limits', y2_lims);
    end, ...
ax, 'UniformOutput', false);

3. 每个轴的Y轴范围不同的情况

如果每个双轴图的Y轴范围不一样,你可以把范围存在数组里,结合索引来批量设置:

% 假设你有3个双轴图,每个图的两个Y轴范围都不同
y1_lims_list = [0 100; 20 120; 0 80]; % 每行对应一个图的第一个Y轴范围
y2_lims_list = [0 500; 50 550; 0 400]; % 每行对应一个图的第二个Y轴范围

% 用索引遍历,给每个图设置对应范围
arrayfun(@(idx) ...
    begin
        set(ax(idx).YAxis(1), 'Limits', y1_lims_list(idx,:));
        set(ax(idx).YAxis(2), 'Limits', y2_lims_list(idx,:));
    end, ...
1:length(ax), 'UniformOutput', false);

这种写法和你原来的for循环功能完全一致,但代码更紧凑,尤其当需要封装更复杂的属性设置逻辑时,匿名函数的形式会更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:55