是否可以 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
。
我正在使用 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
。