是否可以 assemble 几个选项并传递给 matlab 中的绘图函数

Is that possible to assemble several options and pass to the plot function in matlab

我正在使用 matlab 绘制多个图形,希望这些图形使用相同的绘图选项。更具体地说,它看起来像这样。

N = 20;
Fs = 200;
t = (0:N-1)/Fs;

x = sin(2*pi*10*t);
y = cos(2*pi*20*t);
z = x + y;

figure(1),clf;
subplot(311);
plot(t, x, 'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3);
grid on;
subplot(312);
plot(t, y, 'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3);
grid on;
subplot(313);
plot(t, z, 'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3);
grid on;

可以看到剧情选项完全一样。如果我想改变风格,我必须改变每一个。 是否可以assemble/group将它们一起传递给 plot 函数?

我试过把它们放在这样的牢房里 plotOptions = {'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3}; 它不起作用。 原因可能是绘图函数会将 plotOptions 作为一个参数,因此无法解析它

有没有人有解决办法?

亲切的问候。

使用带有选项的单元格已经是一个很好的方法。只需使用{:},如下:

opt = {'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3};
figure(1),clf;
subplot(311);
plot(t, x, opt{:});

然后,单元格的每个元素都作为单个参数求值。

具有独特绘图功能的解决方案:

subplot(312);
myplot(t,y)

myplot 函数保存为单独的 m 文件。

function myplot(t,x)
    plot(t, x, 'bs-', 'MarkerFaceColor', 'b', 'LineWidth', 3);
end

单元格答案很好,另一种选择是将arg值设置为变量:

faceColor = 'b';
lineWidth = 3;

figure(1),clf;
subplot(311);
plot(t, x, 'bs-', 'MarkerFaceColor', faceColor, 'LineWidth', lineWidth);
subplot(312);
plot(t, y, 'bs-', 'MarkerFaceColor', faceColor, 'LineWidth', lineWidth);
subplot(313);
plot(t, z, 'bs-', 'MarkerFaceColor', faceColor, 'LineWidth', lineWidth);

一种非常简洁的替代方法是使绘图命令尽可能简单,然后再操纵手柄。

opts = {'Color','red','MarkerFaceColor', 'b', 'LineWidth',3};

h(1) = plot(t, x);
grid on;
subplot(312);
h(2) = plot(t, y);
grid on;
subplot(313);
h(3) = plot(t, z);
grid on;

arrayfun(@(x) set(x,opts{:}),h)

与真正简洁的 相比的优势在于,如果您有多组属性,例如:

opts.slimRed = {'Color','red','MarkerFaceColor', 'b', 'LineWidth',1};
opts.fatBlue = {'Color','blue','MarkerFaceColor', 'b', 'LineWidth',5};

而你想交换它们,只需要修改一个变量

arrayfun(@(x) set(x,opts.fatBlue{:}),h)

改变一整套手柄的外观h