MATLAB中for循环内加图例、调整xticks及添加绘图标记方法
问题解决方案
完整改进代码
Q = [16,32,64,128,256,512,1024]; VEC_5 = [0.2380 0.2380 0.2380 0.2380 0.2380 0.2380 0.2380]; VEC_10 = [1.1898 1.1898 0.2380 0.2380 0.2380 0.2380 0.2380]; VEC_15 = [2.1416 2.1416 2.1416 1.1898 1.1898 0.2380 0.2380]; VEC_20 = [4.9970 3.0934 2.1416 2.1416 2.1416 1.1898 1.1898]; VEC_25 = [4.9970 4.9970 4.9970 3.0934 2.1416 2.1416 1.1898]; VEC_30 = [8.8043 5.9488 4.9970 4.9970 3.0934 2.1416 1.1898]; VEC_35 = [10.7079 8.8043 6.9007 4.9970 4.9970 2.1416 2.1416]; VEC_40 = [14.5152 10.7079 8.8043 6.9007 4.9970 3.0934 2.1416]; VEC_45 = [16.4188 11.6597 10.7079 8.8043 4.9970 4.9970 2.1416]; VEC_50 = [19.2742 14.5152 10.7079 8.8043 5.9488 4.9970 2.1416]; VEC_55 = [21.1779 16.4188 13.5634 10.7079 6.9007 4.9970 2.1416]; VEC_60 = [23.5574 16.4188 14.5152 10.7079 8.8043 4.9970 2.6175]; VEC = [VEC_5;VEC_10;VEC_15;VEC_20;VEC_25;VEC_30;VEC_35;VEC_40;VEC_45;VEC_50;VEC_55;VEC_60]; theta_values = 5:5:60; % 生成theta参数序列 figure cmap = jet(12); hold on for k = 1:12 % 动态生成图例文本 legend_str = sprintf('\\theta_{1/2} = %d', theta_values(k)); % 绘制带标记的折线并绑定图例 semilogx(Q,VEC(k,:), 'Color', cmap(k, :),'LineWidth',2,... 'Marker','o','MarkerEdgeColor','b','MarkerFaceColor',cmap(k,:),... 'DisplayName',legend_str); end hold off % 调整x轴刻度密度,只显示间隔的刻度 xticks(Q(1:2:end)) xlabel('Q order'); ylabel('Coverage area'); legend('Location','best'); % 自动收集图例并放置在最优位置 grid on;
1. 循环内自动生成图例
- 先创建theta的数值序列
theta_values = 5:5:60,对应每条折线的参数; - 循环内用
sprintf动态拼接图例文本,避免手动编写所有项; - 给
semilogx添加'DisplayName'属性,将文本绑定到当前折线; - 最后只需调用
legend('Location','best'),MATLAB会自动收集所有带DisplayName的折线图例。
2. 调整x轴刻度密度
- 原始
xticks(Q)会显示所有Q值,导致刻度拥挤; - 可以通过索引筛选部分刻度,比如
xticks(Q(1:2:end))只显示奇数位置的刻度(16,64,256,1024); - 也可以手动指定需要的刻度值,比如
xticks([16,128,512]),根据可视化需求灵活调整。
3. 为折线添加标记
- 在
semilogx参数中添加'Marker'属性,指定标记样式,常用选项有'o'(圆形)、's'(方形)、'^'(三角形)等; - 搭配
'MarkerFaceColor'设置标记填充色(这里用对应折线的颜色),'MarkerSize'调整标记大小,提升辨识度。
内容的提问来源于stack exchange,提问作者SH_IQ
相关产品推荐
相关产品推荐

