是否可以组合多个选项并传递到matlab中的绘图函数

是否可以组合多个选项并传递到matlab中的绘图函数,matlab,plot,options,Matlab,Plot,Options,我正在使用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

我正在使用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;
您可以看到打印选项完全相同。如果我想改变风格,我必须改变每一个是否可以将它们组合在一起并传递给绘图功能?

我试着把他们关在这样的牢房里 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);

一种非常干净的替代方法是尽可能地保持plot命令的简单性,然后再操作句柄

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)
与neat相比的优势在于,如果您有多组属性,例如:

opts.slimRed = {'Color','red','MarkerFaceColor', 'b', 'LineWidth',1};
opts.fatBlue = {'Color','blue','MarkerFaceColor', 'b', 'LineWidth',5};
如果你想交换它们,你只需要修改一个变量

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

要更改整个句柄集的外观,可以使用指定的属性创建自己的函数,并使用不同的参数多次调用它。太棒了,这正是我想要的方式。非常感谢。谢谢你的回复。是的,这也是一个很好的解决方案。特别是对于一些复杂的绘图,如添加标签、网格、限制轴的范围等。最好为类似的图形编写一个特殊函数。谢谢您的回复。是的,我同意你的看法,手机的回答很简单,对我的情况很有帮助。将特定的图形作为变量对于每个图形的样式不同的情况很有帮助。我也喜欢这种方法。此外,arrayfun看起来非常强大。