You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Matlab同图中17条曲线添加对应参数标注?

给每条曲线添加对应n值标注的解决方案

我看了你的MATLAB代码,要给这17条曲线加上对应的n值标注其实很简单,下面给你两种实用的方法,顺便帮你优化了原代码里的一些小细节:

方法一:使用图例(Legend)集中标注

这种方法适合把所有n值集中展示在图的角落,清晰直观。我们可以在循环中把每个n值的文本存到一个数组里,最后一次性生成图例:

clear all
close all
clc

wn = 4000; % rad/s
n_values = 0:0.05:0.8; % 先把所有n值存起来,方便后续处理
legend_text = []; % 用来存储每个n对应的图例文本

hold on
for idx = 1:length(n_values)
    n = n_values(idx);
    w = 0:10:1884;
    x = w/wn;
    % 修正原公式:分母里的(1-x²)需要平方,这是频响函数的标准形式
    H = 1./sqrt((1 - x.^2).^2 + (2*n*x).^2); 
    plot(x, H, 'LineWidth', 1.2); % 加线宽让曲线更清晰
    legend_text{idx} = sprintf('n = %.2f', n); % 把n值格式化为字符串存起来
end

title('Frequency Response versus Normalized Frequency (n varies)');
xlabel('Normalized Frequency (w/wn)'); % 原xlabel标注的Time(s)有误,这里是归一化频率,修正后更准确
ylabel('Magnitude Response |H|');
legend(legend_text, 'Location', 'best'); % 自动选最合适的位置放图例
hold off

方法二:直接在曲线上添加文本标注

如果不想用图例,想让n值直接显示在对应曲线旁边,可以用text函数,比如选每条曲线的末尾位置标注:

clear all
close all
clc

wn = 4000; % rad/s
n_values = 0:0.05:0.8;

hold on
for idx = 1:length(n_values)
    n = n_values(idx);
    w = 0:10:1884;
    x = w/wn;
    H = 1./sqrt((1 - x.^2).^2 + (2*n*x).^2);
    plot(x, H, 'LineWidth', 1.2);
    
    % 在曲线的末尾位置添加文本标注
    last_x = x(end);
    last_H = H(end);
    text(last_x, last_H, sprintf('n=%.2f', n), 'VerticalAlignment', 'middle');
end

title('Frequency Response versus Normalized Frequency (n varies)');
xlabel('Normalized Frequency (w/wn)');
ylabel('Magnitude Response |H|');
hold off

另外补充几个小优化点:

  • 原代码里的syms w完全没用,因为后面直接给w赋值成数值数组了,直接删掉即可;
  • title和坐标轴标签放在循环外面只设置一次就够了,没必要每次循环重复设置;
  • 原频响函数的公式有误,漏掉了(1-(w/wn).^2)的平方,已经帮你修正,不然曲线形状会不符合理论结果。

内容的提问来源于stack exchange,提问作者Gökhan Avşar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:06:03