如何在MATLAB绘图中设置Y轴网格间隔为5?
MATLAB设置Y轴每5单位显示网格的解决方法
你的问题出在变量名重复覆盖:你先把y轴的最大值存在Max里,之后又把x轴的最大值赋值给了同一个Max变量,导致后续用yticks(0:5:Max+10)时,Max其实是x轴的最大值,不是y轴的,自然不会生效。
修复步骤:
- 把存储y轴最大值的变量改成
YMax,避免和x轴的变量冲突 - 在设置
ylim之后,添加正确的yticks设置 - 确保网格跟随主刻度显示
修改后的完整代码:
function DisplayNumber(x,y1,y2,Name,Method) plot(x,y1,'-s','MarkerSize',9,... 'MarkerEdgeColor','green',... 'MarkerFaceColor',[0 0.4470 0.7410]) hold on % 注意:此处原legend会被后续调用覆盖,建议按需保留 % legend({'cos(x)','cos(2x)','cos(3x)','cos(4x)'},... % 'Location','northwest','NumColumns',2) p=plot(x,y2,'-s','MarkerSize',9,... 'MarkerEdgeColor','yellow',... 'MarkerFaceColor',[0.6350 0.0780 0.1840]) hold off xtickangle(0) % 单独存储y轴最大值,避免被x轴变量覆盖 YMax = max( max(y1), max(y2) ); ylim([0 YMax+10]); % 设置Y轴每5个单位一个刻度,网格会自动对齐这些刻度 yticks(0:5:YMax+10); % 单独存储x轴最大值 XMax = max(x); xlim([1 XMax+1]); xticks(0 : 20) legend( strcat(Method,"-AHP"),strcat(Method,"-MOWOA-NIS")); ylabel('Rank reversal ratio %'); xlabel('Number of networks'); grid on % 若需要次网格,可添加此行,不影响主网格显示 % grid minor set(gcf,'Units','Inches'); pos = get(gcf,'Position'); set(gcf,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3), pos(4)]) print(gcf,Name,'-dpdf','-r0') end
额外说明:
- 代码里有两次
legend调用,第一次的内容会被第二次完全覆盖,建议根据需求保留一个,避免逻辑混乱。 grid on默认会跟随主刻度显示网格,只要yticks设置正确,网格就会自动在每5个单位的位置显示。
内容的提问来源于stack exchange,提问作者stevGates
相关产品推荐
相关产品推荐

