如何将字符串转换为将传递到绘图函数的变量?
Time = [0,1,2,3];
A = sin(Time);
B = cos(Time);
c = 2*sin(Time);
lookup = {"A", "Freq(Hz)"; "B", "Pressure(bar)", "c", "time(ms),....};
for i=1:length(lookup)
plot(Time, lookup(i,1))
ylabel(lookup(i,2))
end
我想绘制Time
vs A
和Time
vs B
和Time
vs C
,同样我要绘制50个不同的变量
因此,我计划使用字符串创建查找,并计划使用eval
函数调用将其作为变量传递给绘图函数。
但是在少数地方,我读到使用eval
并不是一个好的选择,因此请建议使用其他方法。
答案 0 :(得分:0)
这将解决您的直接问题:
替换
lookup = {"A", "Freq(Hz)"; "B", "Pressure(bar)", "c", "time(ms)", ...};
使用
lookup = {A, "Freq(Hz)"; B, "Pressure(bar)", c, "time(ms)", ...};
单元格数组是异构容器,每个元素可以是任何时间的数组,而与所有其他类型无关。
进行此更改后,其余代码应按预期工作。您可能想在循环中添加一个figure
命令或一个print
命令,因为每个图都会覆盖前一个图。 figure
创建一个新的图形窗口进行绘制,您将拥有50个窗口(不是很好)。 print
可以将绘图保存到文件中,这可能是一种更好的方法。不要试图将50条数据线合并为一个图,这将是一团糟!
在更大范围内,您可能想通过定义50个不同的变量来重新考虑策略。单元数组和结构数组确实是解决此问题的好方法。例如,您可以想到
data.A = sin(Time);
data.B = cos(Time);
data.c = 2*sin(Time);
或
data(1).values = sin(Time);
data(1).name = "A";
data(1).units = "Freq(Hz)";
data(2).values = cos(Time);
data(2).name = "B";
data(2).units = "Pressure(bar)";
data(3).values = 2*sin(Time);
data(3).name = "c";
data(3).units = "time(ms)";
请注意,在第一种情况下,您还可以使用data.("A")
进行索引,这使您非常接近最初的想法,除了工作空间中没有50个变量,而只有一个数据结构这样更容易处理。
Here is a very detailed list of reasons why eval
can be bad to use。该链接还显示了一些替代方案,类似于我上面总结的。