在 MATLAB 和图例中绘图

Plotting in MATLAB and legend

首先,我试图弄清楚一个更复杂的情况,但这是我能提供的最简单的例子。假设我想用一个普通的图形显示 3 个函数的图形 sinx, sin(2x), sin(3x),包括它们的图例。

我可以用普通图形画图,但我有问题legend.我提供我的算法给你(抱歉不是一个优化的算法,但我不太会写算法)。

x = 0:0.01:2*pi;
for i = 1:3
    g = plot(sin(i*x));
    legend(sprintf('sin(%f *x)', i))
    hold on
end
hold off
g

如果你能帮我修正我的算法就太好了。

您可以将 DisplayName 传递给 plot 函数

x = 0:0.01:2*pi;
for i = 1:3
    g = plot(sin(i*x),'DisplayName',sprintf('sin(%.0f *x)', i));
    hold on
end
hold off
legend('Show','Location','NorthEast')

你想要的可以不用循环完成:

  • 使用bsxfun计算每个i乘以向量x的乘积,然后计算其sin。这给你一个矩阵,s。构建矩阵,使每个 i 都是不同的 .
  • 只需发布plot(s)。当您将矩阵传递给 plot 时,将生成每个 的图形。
  • 构建一个包含字符串的元胞数组(您可以使用 arrayfun for that) and use that as the input argument to legend.

代码:

x = 0:0.01:2*pi;
ii = 1:3;
s = sin(bsxfun(@times, ii, x.'));
plot(s)
str = arrayfun(@(k) ['sin(' num2str(k) '*x)'], ii, 'uniformoutput', false);
legend(str)

结果: