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

如何用Matplotlib绘制带对数R轴的天线辐射方向图?

解决Matplotlib绘制对数极坐标天线辐射方向图的问题

因为Matplotlib的对数极坐标在反转r轴时存在兼容性问题,最简单的方法是先将dB值转换为线性功率比,再利用对数极坐标绘图,最后自定义刻度标签显示dB值,具体步骤如下:

  • 数据转换:将dB单位的增益(衰减)转换为线性功率比,公式为 power_ratio = 10 ** (gain_dB / 10)。比如30dB衰减对应10**(-3),0dB对应10**0=1。
  • 绘图设置:使用极坐标,设置rscale='log',并将r轴范围设为[1e-3, 1](对应30dB到0dB),这样极坐标外圈对应0dB,中心对应30dB,符合需求。
  • 自定义刻度:把r轴的刻度从功率比转换回dB值,让显示更直观。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 替换为你的实际数据
azimuth_h = np.linspace(0, 2*np.pi, 100)
gain_h = np.linspace(0, 30, 100)
azimuth_v = np.linspace(0, 2*np.pi, 100)
gain_v = np.linspace(5, 25, 100)

# 将dB值转换为线性功率比
power_h = 10 ** (gain_h / 10)
power_v = 10 ** (gain_v / 10)

fig = plt.figure(figsize=(10,5))
ax = plt.subplot(121, projection='polar')

# 设置对数r轴及范围
ax.set_rscale('log')
ax.set_rlim(1e-3, 1)

# 绘制辐射方向图
ax.plot(azimuth_h, power_h)
ax.plot(azimuth_v, power_v)

# 自定义r轴刻度:将功率比刻度转换为dB标签
db_ticks = [0, 10, 20, 30]
power_ticks = [10 ** (db / 10) for db in db_ticks]
ax.set_yticks(power_ticks)
ax.set_yticklabels([f'{db} dB' for db in db_ticks])

ax.grid(True)
plt.show()

为什么直接用set_rscale('log')+set_rlim(30,0)不行?

Matplotlib的对数轴要求数值为正,且默认按从小到大的顺序排列。当你设置set_rlim(30,0)反转r轴时,对数刻度的计算逻辑会混乱,导致图形显示异常。通过转换为线性功率比,我们可以利用正常的对数轴范围(从小到大的正数),同时通过刻度标签的转换,实现“外圈0dB,中心数值更大”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:12:58