首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理多个情节的传说

如何管理多个情节的传说
EN

Stack Overflow用户
提问于 2016-03-09 01:29:55
回答 2查看 342关注 0票数 1

我该如何处理这个问题?

代码语言:javascript
复制
clear all; close all; clc;
r = 0:5;
zeta = 0:0.1:1;
for i = 1:size(zeta(:))
    for j = 1:size(r(:))
    X(i,j) = sqrt((1+(2*zeta(i)*r(j))^2)/((1-r(j)^2)^2+ (2*zeta(i)*r(j))^2));
    end
    plot(r,X);
    xlabel('r = \omega/\omega_n');
    ylabel('M = \frac{X}{Y}');
    hold all
    grid
    [~,~,~,current_entries] = legend;
    legend([current_entries {sprintf('\zeta = %i',zeta(i))}]);
end
figure
plot(r,X)
grid

hold all命令似乎没有正常工作。我能做些什么来解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-09 01:35:11

您将希望设置绘图的DisplayName属性。然后,当您创建legend时,标签将自动填充。

代码语言:javascript
复制
plot(r, X, 'DisplayName', 'name')

另外,您传递给sprintf用于传奇的字符串需要转义,因为sprintf认为\z是一个控制字符。

代码语言:javascript
复制
plot(r, X, 'DisplayName', sprintf('\\zeta = %0.1f',zeta(k)))

此外,推荐使用hold on而不是hold all。此外,在调用hold时指定轴句柄是最佳做法,以确保将其应用于当前轴。

代码语言:javascript
复制
hold(hax, 'on')

因此,如果我们将这些更改合并到您的绘图代码中(以及@R.Falque使用semilogy的想法)

代码语言:javascript
复制
r = 0:0.001:5;
zeta = 0:0.1:1;

hax = axes();

colors = hsv(numel(zeta));

for k = 1:numel(zeta)
    X = sqrt((1 + (2 * zeta(k) * r).^2) ./ ((1-r.^2).^2+ (2*zeta(k)*r).^2));
    semilogy(r, X, ...
               'DisplayName', sprintf('\\zeta = %0.1f',zeta(k)), ...
               'Color', colors(k,:));
    hold(hax, 'on')
end

grid(hax, 'on')

xlabel(hax, 'r = \omega/\omega_n', 'Interpreter', 'tex');
ylabel(hax, 'M = $\displaystyle\frac{X}{Y}$', 'Interpreter', 'latex');

L = legend('show');

票数 2
EN

Stack Overflow用户

发布于 2016-03-09 02:03:40

还可以使用单元格数组,如下所示:

代码语言:javascript
复制
clear all; close all; clc;
r = 0:0.001:5;
zeta = 0:0.1:1;

figure;
for i = 1:length(zeta)
    for j = 1:length(r)
        X(j) = sqrt((1+(2*zeta(i)*r(j))^2)/((1-r(j)^2)^2+ (2*zeta(i)*r(j))^2));
    end
    semilogy(r,X);
    hold on
    legend_string{i} = ['\zeta = ', num2str(zeta(i))];
end
hold off

grid
xlabel('r = \omega/\omega_n');
ylabel('M = $\frac{X}{Y}$','Interpreter', 'Latex');

legend(legend_string);

请注意,X定义中有一个错误(从X(i,j)更正为X(j))。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35881309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档