如何为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
相关产品推荐
相关产品推荐

