Plotly go.Scatterpolar雷达图显示数据值与修复刻度旋转问题
Plotly极坐标雷达图问题修复方案
针对两个问题可直接通过Plotly原生属性配置实现,无需额外依赖:
1. 径向轴0-5刻度异常旋转修复
该问题是极坐标径向轴刻度默认跟随所在角度自动旋转导致的,只需要给每个极坐标子图的径向轴配置tickangle=0,即可强制刻度文字保持水平不旋转。配置时建议同步手动设置径向轴范围,预留出外侧数值标注的空间,避免文字被裁切。
2. 数据点r值外侧标注实现
不需要做复杂的极坐标-直角坐标转换,直接叠加一层无标记、无描边的文本类型Scatterpolar图层即可实现外侧标注效果:
- 文本图层的
theta取值和原数据点完全一致,保证文字和对应数据点在同一条径向轴上 - 文本图层的
r取值在原数据r值基础上增加固定小偏移,让文字落在雷达图轮廓外侧、径向轴之外的位置,不会遮挡图表内容 - 设置图层
mode='text',隐藏图例避免冗余项,可按需调整文字大小、颜色匹配图表风格
修复后完整可运行代码
import plotly.graph_objects as go from plotly.subplots import make_subplots question = ["Q1", "Q2", "Q3", "Q4"] datasets = [ [5.60, 5.62, 5.60, 5.59], [5.60, 5.62, 5.60, 5.59], [5.60, 5.62, 5.60, 5.59], [5.60, 5.62, 5.60, 5.59] ] trace_names = ["Graph 1", "Graph2", "Graph3", "Graph4"] subplot_pos = [(1,1), (1,2), (2,1), (2,2)] fig = make_subplots(rows=2, cols=2, specs=[[{'type': 'polar'}] * 2] * 2) # 逐个添加雷达图本体和对应标注 for idx, pos in enumerate(subplot_pos): r_data = datasets[idx] # 添加雷达图主轨迹 fig.add_trace( go.Scatterpolar( theta=question, r=r_data, name=trace_names[idx], fill='toself' # 不需要填充可直接删除该参数 ), row=pos[0], col=pos[1] ) # 添加外侧数值标注 fig.add_trace( go.Scatterpolar( theta=question, r=[v + 0.35 for v in r_data], # 偏移量按需调整,控制文字和雷达图轮廓的间距 text=[f"{v:.2f}" for v in r_data], mode='text', showlegend=False, textfont=dict(size=10, color='#333') ), row=pos[0], col=pos[1] ) # 统一配置四个极坐标子图,修复刻度旋转+设置轴范围 polar_base_config = dict( radialaxis=dict( range=[0, 6.5], # 最大值预留足够空间放外侧标注 tickangle=0, # 强制径向刻度水平,修复旋转异常 tickvals=[0,1,2,3,4,5] # 保留原0-5的刻度设置 ) ) fig.update_layout( polar=polar_base_config, polar2=polar_base_config, polar3=polar_base_config, polar4=polar_base_config, margin=dict(l=20, r=20, t=40, b=20) ) fig.show()
效果说明
运行代码后,径向刻度将保持水平无异常旋转,每个数据点对应的r值会显示在雷达轮廓外侧,和参考示意图效果一致。如果觉得文字和图形间距不合适,直接调整标注层r值的偏移量、径向轴range的最大值即可。
原问题效果参考:
期望效果参考:
内容的提问来源于stack exchange,提问作者Jo-Achna
相关产品推荐
相关产品推荐



