如何在MATLAB中绘制four-way logarithmic(四向对数)图
MATLAB 实现四向对数图绘制方法
四向对数(four-way logarithmic)图是振动控制与抗震防护领域的常用图表,可同时在四个对数刻度坐标轴上展示多组关联参数的对应关系,无需借助Inkscape等外部工具手动调整坐标轴,在MATLAB内通过多轴叠加逻辑即可完成全流程绘制。
实现思路
- 基于MATLAB坐标区对象的叠加逻辑实现多轴展示,无需额外依赖
- 首先创建主坐标区,配置底部X轴、左侧Y轴的对数刻度与数据
- 叠加两个透明坐标区,分别配置顶部X轴、右侧Y轴的对数刻度,隐藏重叠的冗余刻度标签
- 统一所有坐标区的位置与刻度对应关系,保证参数映射准确
完整实现代码
% ===== 1. 准备示例数据,可根据实际需求替换 ===== % 频率范围 0.1~100Hz,对数采样 f = logspace(-1,2,1000); % 示例为单自由度系统传递率计算 zeta = 0.05; % 阻尼比 Tn = 1./f; % 周期,对应顶部X轴 omega = 2*pi*f; omega_n = 2*pi; % 固有角频率 r = omega/omega_n; % 频率比 % 传递率(对应左侧Y轴) TR = sqrt((1 + (2*zeta*r).^2)./((1 - r.^2).^2 + (2*zeta*r).^2)); % 位移响应谱(对应右侧Y轴,输入激励为1g) Sd = TR.*(9.81./omega.^2); % ===== 2. 创建主坐标区:底部X=频率,左侧Y=传递率 ===== ax1 = axes('Position',[0.12 0.12 0.75 0.75]); loglog(ax1, f, TR, 'b','LineWidth',1.5); xlabel(ax1, '频率 f (Hz)','FontSize',12); ylabel(ax1, '传递率 T_R','FontSize',12); grid(ax1, 'on'); set(ax1, 'XLim', [1e-1 1e2], 'YLim', [1e-2 1e2]); % ===== 3. 叠加顶部X轴坐标区:顶部X=周期 ===== ax2 = axes('Position', get(ax1, 'Position'), 'XAxisLocation','top', 'Color','none'); loglog(ax2, Tn, TR, 'b','LineWidth',1.5); xlabel(ax2, '周期 T_n (s)','FontSize',12); % 周期为频率倒数,反转X轴范围保证参数对应 set(ax2, 'XLim', flip(get(ax1, 'XLim')), 'YLim', get(ax1, 'YLim')); % 隐藏冗余刻度,避免和主坐标区重叠 set(ax2, 'YTickLabel', []); % ===== 4. 叠加右侧Y轴坐标区:右侧Y=位移响应谱 ===== ax3 = axes('Position', get(ax1, 'Position'), 'YAxisLocation','right', 'Color','none'); loglog(ax3, f, Sd, 'r','LineWidth',1.5); ylabel(ax3, '位移响应谱 S_d (m/g)','FontSize',12); set(ax3, 'XLim', get(ax1, 'XLim'), 'YLim', [1e-4 1e1]); % 隐藏冗余刻度 set(ax3, 'XTickLabel', []); % ===== 5. 可选配置:添加图例 ===== legend(ax1, '传递率', 'Location','northeast'); legend(ax3, '位移响应谱', 'Location','southeast');
关键注意事项
- 所有叠加的坐标区必须设置完全一致的
Position属性,才能保证刻度对应准确 - 顶部X轴为周期类参数时,需要将X轴范围和底部频率轴反序,才能实现对数刻度下的一一对应
- 叠加的坐标区需要设置
Color为none,保证下层坐标区的内容、网格可见 - 若已安装地震工程相关MATLAB工具箱(如OpenSeesMATLAB),可直接调用内置的
fourwayplot类函数,参数配置更简便 - 可根据实际需求修改坐标轴对应的参数计算逻辑、刻度范围、曲线样式等。
内容的提问来源于stack exchange,提问作者mina
相关产品推荐
相关产品推荐

