如何将Matplotlib极坐标角度标签间隔从45°改为15°?
修改Matplotlib极坐标角度标签间隔为15°
我来帮你搞定这个需求!要把Matplotlib默认的极坐标角度标签从45°间隔改成15°,只需要给极坐标轴设置自定义的角度刻度即可,下面是具体的修改方案和完整代码:
关键修改点
Matplotlib极坐标的角度默认使用弧度,所以我们需要生成15°间隔的弧度数组,然后通过ax.set_xticks()方法替换默认刻度:
- 15°对应的弧度是
π/12(因为180°=π,所以1°=π/180,15°=15*π/180=π/12) - 生成从0到2π(即0°到360°)、步长为π/12的数组,就能得到15°间隔的刻度
另外,原代码里用3.1415926代替π,建议换成np.pi更准确规范;同时文件读取用with语句会更安全。
修改后的完整代码
import matplotlib.pyplot as plt import numpy as np def processDir(file, output, title): angles = list() values = list() # 用with语句安全读取文件 with open(file, 'r') as f: lines = [line.rstrip('\n') for line in f] for line in lines: stringElement = str.split(line, " ") # 处理数据行的空格分隔问题 if len(stringElement) >=2: angle = int(stringElement[0]) value = float(stringElement[1]) # 用np.pi替代硬编码的圆周率,更准确 angles.append((angle/360)*2*np.pi) values.append(value) ax = plt.subplot(111, projection='polar') plt.polar(angles, values, label=title, color="darkviolet") # --- 核心修改:设置15°间隔的角度刻度 --- # 生成15°间隔的弧度数组(0到2π,步长π/12) ax.set_xticks(np.arange(0, 2*np.pi, np.pi/12)) # 可选:将刻度标签显示为角度值(比如0°、15°...),默认显示弧度 ax.set_xticklabels([f'{int(rad*180/np.pi)}°' for rad in ax.get_xticks()]) ax.legend(bbox_to_anchor=(0., 1.1, -1., .102), loc=3, ncol=2, mode="expand", borderaxespad=0., frameon=False) ax.grid(True) axmin = ax.get_rmin() axmax = ax.get_rmax() step = 6 axlist = np.arange(axmin, axmax + step, step) ax.set_rticks(axlist) ax.figure.set_size_inches(8, 5) plt.savefig(output) plt.show() processDir("test.txt", "polar_plot.png", "My Title")
额外说明
- 你的
test.txt数据已经包含了15°间隔的角度值,所以绘图时数据点会完美匹配新的刻度间隔 - 如果不需要显示角度标签(比如保留弧度),可以去掉
ax.set_xticklabels()这一行 - 运行代码后,极坐标图的角度标签就会变成0°、15°、30°...345°的15°间隔样式
内容的提问来源于stack exchange,提问作者Klaas Kramer
相关产品推荐
相关产品推荐

