Matplotlib Polarplot极坐标图设置径向errorbar及调整角度标签问题
极坐标绘图问题解决方案
1 径向误差棒实现
你遇到的误差棒切向显示、长度随径向距离变化的问题,核心是两个原因:一是原代码中lw=20的线宽设置过大,径向误差棒的线宽远大于长度时视觉上会误判为切向;二是默认errorbar在部分Matplotlib版本的极坐标场景下存在参数识别偏差。
直接用手动逐点绘制径向误差棒的方案可100%适配需求,替换你原代码中的plt.errorbar行即可:
# 手动绘制径向误差线 for theta, r, err in zip(phi_mol1D/180.*np.pi, MFPAD, MFPADerr): # 固定角度,从r-err到r+err绘制线段,天然为径向 ax.plot([theta, theta], [r-err, r+err], color='b', lw=2) # 绘制数据标记点 ax.scatter(phi_mol1D/180.*np.pi, MFPAD, c='b', edgecolor='green', s=25)
不需要使用Affine2D旋转逻辑,该方案针对的是标记旋转场景,和误差棒方向调整无关。
2 角度刻度标签外移
调整角度轴(极坐标下对应x轴)的刻度padding参数即可,pad数值越大标签越靠外,按需调整即可:
# 放在刻度调整代码段中即可 ax.tick_params(axis='x', pad=30)
修改后完整可运行代码
import numpy as np import matplotlib.pyplot as plt from scipy import interpolate # 插值红曲线定义 tck = interpolate.splrep(phi_mol1D, MFPAD,s=0) xnew = np.arange(-180, 180, 0.5) ynew = interpolate.splev(xnew, tck) fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) # 绘制红曲线 ax.plot(xnew/180.*np.pi, ynew, c="r", alpha=0.5) # 径向误差棒+数据点绘制 for theta, r, err in zip(phi_mol1D/180.*np.pi, MFPAD, MFPADerr): ax.plot([theta, theta], [r-err, r+err], color='b', lw=2) ax.scatter(phi_mol1D/180.*np.pi, MFPAD, c='b', edgecolor='green', s=25) # 基础样式调整 ax.set_rticks([2000,4000,6000, 8000]) ax.set_yticklabels([]) ax.grid(True) # 角度刻度外移 ax.tick_params(axis='x', pad=30) plt.show()
内容的提问来源于stack exchange,提问作者giammi56
相关产品推荐
相关产品推荐

