MATLAB使用log2作为x轴时如何删除多余xticklabels并添加指定刻度
Matlab log2刻度X轴自定义标签解决方案
核心修改逻辑
不需要使用自动生成的X轴刻度,直接手动指定刻度位置和对应标签即可,逻辑如下:
- 期望显示的标签对应的X轴实际数值为
log2(标签值)(因为绘图时X轴输入的是log2(CPU核数)) - 手动指定
XTick为这些转换后的位置,XTickLabel为想要显示的原始数值,就能完全规避自动生成的非2的整数次幂的中间标签
具体修改方法
将代码中以下两行:
xt = get(gca, 'XTick'); set(gca, 'XTickLabel', 2.^xt);
替换为如下代码即可:
% 自定义想要显示的X轴标签 desired_labels = [1, 2, 4, 8, 16, 28, 32]; % 计算标签对应的log2刻度位置(匹配X轴的数值空间) xtick_pos = log2(desired_labels); % 手动设置刻度和标签 set(gca, 'XTick', xtick_pos); set(gca, 'XTickLabel', desired_labels); % 可选:调整X轴范围确保32的标签完整显示 xlim([log2(1), log2(32)]);
完整修改后代码
compTime_1by1 = [1088.43, 603.71, 354.15, 236.48, 180.46, 159.06]; compTime_2by1 = [2196.49, 1179.91, 648.38, 413.79, 299.63, 268.45]; compTime_3by1 = [3238.68, 1729.27, 930.70, 590.57, 419.56, 337.15]; speedup_1by1 = compTime_1by1(1) ./ compTime_1by1; speedup_2by1 = compTime_2by1(1) ./ compTime_2by1; speedup_3by1 = compTime_3by1(1) ./ compTime_3by1; numberOfCPUCores = [1, 2, 4, 8, 16, 28]; h1 = plot(log2(numberOfCPUCores), speedup_1by1, '-ob'); set(h1, 'MarkerFaceColor', get(h1,'Color')); hold on; h2 = plot(log2(numberOfCPUCores), speedup_2by1, '-or'); set(h2, 'MarkerFaceColor', get(h2,'Color')); hold on; h3 = plot(log2(numberOfCPUCores), speedup_3by1, '-ok'); set(h3, 'MarkerFaceColor', get(h3,'Color')); % -------------- 以下为修改的部分 -------------- % 自定义想要显示的X轴标签 desired_labels = [1, 2, 4, 8, 16, 28, 32]; % 计算标签对应的log2刻度位置(匹配X轴的数值空间) xtick_pos = log2(desired_labels); % 手动设置刻度和标签 set(gca, 'XTick', xtick_pos); set(gca, 'XTickLabel', desired_labels); % 调整X轴范围确保32的标签完整显示 xlim([log2(1), log2(32)]); % -------------- 以上为修改的部分 -------------- set(gca, 'FontSize', 14); title('Parallel Scalability Test'); legend('Aspect ratio = 1 : 1', 'Aspect ratio = 2 : 1', 'Aspect ratio = 3 : 1', 'Location', 'best'); xlabel('Number of CPU cores'); ylabel('Speed-up'); grid on; grid minor;
内容的提问来源于stack exchange,提问作者livemyaerodream
相关产品推荐
相关产品推荐

