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

MATLAB中如何设置上方X轴刻度值与位置?现有代码无刻度显示

问题原因

你设置的new_tick_locations(30-80)不在ax2的默认X轴范围内(ax2的X范围由x_b决定,约为0.068到0.16),所以MATLAB不会显示这些超出范围的刻度。另外,要让ax2刻度与ax1的[30,40,50,60,70,80]对齐,需要建立两个X轴的坐标映射关系。

解决步骤及修改后的代码
  1. 先明确ax1的目标刻度,并调整ax1的X轴范围以包含这些刻度
  2. 通过线性插值,将ax1的刻度位置转换成ax2坐标系下的对应值
  3. 设置ax2的XTick为转换后的值,同时保留你需要的刻度标签

修改后的代码:

x_a = linspace(71.8131,36.9931,10);
y = linspace(0.16,1,10);
x_b = linspace(0.0163,0.0069,10)./0.1016;
figure;
ax1 = axes;
plot(ax1, x_a, y, 'k');

% 设置ax1的刻度为目标值,并调整X轴范围
ax1_ticks = [30, 40, 50, 60, 70, 80];
ax1.XTick = ax1_ticks;
ax1.XLim = [min(ax1_ticks), max(ax1_ticks)];

ax2 = axes('Position', ax1.Position, ...
           'XAxisLocation', 'top', ...
           'YAxisLocation', 'right', ...
           'Color', 'none', ...
           'XColor', '#88419d', ...
           'YColor', 'none', ...
           'Box', 'off');
ax2.YLim = ax1.YLim;

% 将ax1的刻度位置映射到ax2的坐标系
% 利用x_a和x_b的一一对应关系,线性插值得到ax2对应的刻度位置
ax2_tick_locations = interp1(x_a, x_b, ax1_ticks, 'linear', 'extrap');

% 生成你需要的刻度标签
new_tick_labels = arrayfun(@(val) sprintf('%.2f', val/500), ax1_ticks, 'UniformOutput', false);

set(ax2, 'XTick', ax2_tick_locations, 'XTickLabel', new_tick_labels);
% 调整ax2的X轴范围,确保刻度都在范围内
ax2.XLim = [min(ax2_tick_locations), max(ax2_tick_locations)];

hold(ax2, 'on');
plot(ax2, x_b, y, 'r');
关键说明
  • 用interp1实现了x_a(ax1的X数据)和x_b(ax2的X数据)之间的线性映射,确保ax2的刻度位置与ax1的目标刻度视觉对齐
  • 强制设置ax1和ax2的XLim,保证所有刻度都在轴的显示范围内
  • 保留了你原本需要的刻度标签生成逻辑

内容的提问来源于stack exchange,提问作者floyd123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:42:02