我有3个.m文件,每个文件都绘制了一个图形。我需要将它们三个的结果叠加在一起,所以我做的是将这三个代码复制到一个.m文件中。
问题是我需要清理(通过使用命令 "clear"),在每个程序之间,因此,在每个图之间。
谁有什么建议,如何将这三个结果绘制在一个图中,请问?
谢谢!谢谢 :-)
试试下面的方法:一个单一的文件,包含四个函数。
function plotEverything()
[x1 y1] = data1();
[x2 y2] = data2();
[x3 y3] = data3(0.5);
figure
plot(x1, y1);
hold all;
plot(x2, y2);
plot(x3, y3);
title 'my awesome plot of everything';
xlabel 'X'; ylabel 'Y';
legend({'one', 'two', 'three'});
end
function [x y] = data1()
x = 1:5;
y = 0.5 * x;
end
function [x y] = data2()
x = 2:2:10;
y = sqrt(x);
end
function [x y] = data3(p)
x = linspace(0,7,15);
y = 0.1 * rand(size(x)) + p * x.^2;
end
把它放在文件中 plotEverything.m
,并在命令行中用 plotEverything
. 不需要显式地清除任何变量--在任何函数中创建的任何东西都会在最后一个函数返回时消失,而由各个函数创建的任何东西(注意,我把所有的东西都称为 "变量")都会被清除。x
, y
- 是故意的)对其他函数是不可见的,因为它有本地范围。
现在代码已经组织好了--有一个函数专门用于绘图,还有一个函数用于生成数据,这些数据将被输入到每个绘图中。很明显,你的函数 data1
等会比我的复杂,但想法是一样的。
你可以用这一行。
clearvars -except YourVariables
其中你的变量是你想保留的。
我相信你在每个脚本之后都会清除你的变量,这意味着你不需要一个脚本的变量来运行另一个脚本。所以你可以使用这行
figure; %// a figure will open up
hold on;
call script 1
clear;
call script 2
clear;
call script 3;
clear;
Noe一开始打开的图会有所有的叠加图。
同时 保重 你的所有脚本都不应该调用 figure
命令(他们可以调用 plot
命令),否则将打开一个新的图形,并且不会叠加图形。