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

Python Matplotlib雷达图:如何设置标签对齐?

解决Matplotlib雷达图标签环形对齐的问题

我太懂这种雷达图标签对齐的头疼事了——默认居中会直接超出轴线,手动分左右对齐又没法做到那种贴合环形的自然效果。你之前遍历标签设置对齐的思路是对的,但没考虑到雷达图是环形分布的,每个标签的最优对齐方式得跟着它所在的角度走,而不是简单一刀切左/右对齐。

这里给你一个精准适配环形角度的解决方案,能让每个标签都完美贴合轴线外侧:

核心思路

雷达图的标签角度是从0°(正右)逆时针分布的,我们可以通过计算每个角度的余弦、正弦值,判断标签在环形的哪个象限,然后设置对应的水平(ha)和垂直(va)对齐方式,甚至可以微调标签位置让它刚好卡在轴线外侧。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 1. 准备示例数据
categories = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
values = [4, 3, 5, 2, 4, 3, 5, 4]
n = len(categories)
# 生成环形角度(从0到2π,不包含终点)
angles = np.linspace(0, 2 * np.pi, n, endpoint=False)

# 2. 绘制雷达图(闭合图形)
values = np.concatenate((values, [values[0]]))
angles_closed = np.concatenate((angles, [angles[0]]))

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'polar': True})
ax.plot(angles_closed, values, 'o-', linewidth=2)
ax.fill(angles_closed, values, alpha=0.25)

# 3. 设置标签并调整环形对齐
ax.set_xticks(angles)
ax.set_xticklabels(categories)

# 遍历每个标签和对应的角度,设置对齐方式
for label, angle in zip(ax.get_xticklabels(), angles):
    cos_angle = np.cos(angle)
    sin_angle = np.sin(angle)
    
    # 水平对齐:右侧角度(cos>0)左对齐,左侧角度(cos<0)右对齐,上下角度居中
    if cos_angle > 0:
        label.set_horizontalalignment('left')
    elif cos_angle < 0:
        label.set_horizontalalignment('right')
    else:
        label.set_horizontalalignment('center')
    
    # 垂直对齐:上侧角度(sin>0)底部对齐,下侧角度(sin<0)顶部对齐,左右角度居中
    if sin_angle > 0:
        label.set_verticalalignment('bottom')
    elif sin_angle < 0:
        label.set_verticalalignment('top')
    else:
        label.set_verticalalignment('center')
    
    # 可选:微调标签位置,让它离轴线更远一点(1.1是缩放因子,可按需调整)
    label.set_position((1.1 * cos_angle, 1.1 * sin_angle))

plt.show()

为什么这个方法有效?

  • 不像简单的左右分半对齐,这个方案会自动适配每个角度的位置:比如正上方的标签会居中+底部对齐,正下方的标签会居中+顶部对齐,45°的标签会左对齐+底部对齐,完全贴合环形的走向。
  • 最后的set_position可以让标签刚好落在轴线外侧,既不会超出图边界,也不会和轴线挤在一起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:41:21