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

如何计算Matplotlib/Plotly中雷达图的数据集多边形面积?

计算雷达图多边形面积作为总分的实现方法

雷达图的多边形面积可通过分解为多个三角形求和的方式计算:将多边形拆成以原点为顶点、相邻特征轴为边的三角形,每个三角形面积用公式 (1/2)*r_i*r_{i+1}*sin(θ) 计算(θ是相邻轴的夹角,即 2π/n,n为特征数量),最后求和得到总面积,以此作为数据集的「总分」。

Matplotlib 实现步骤及代码

  1. 准备数据集:确保数据首尾闭合(最后一个元素等于第一个,形成完整多边形)
  2. 计算特征轴的均匀夹角
  3. 代入公式求和计算总面积
import numpy as np

# 示例数据集:对应4个特征,首尾闭合
data_set = [4, 3, 5, 2, 4]
n_features = len(data_set) - 1  # 去除重复的首尾元素,得到特征数量
angle_step = 2 * np.pi / n_features  # 相邻特征轴的夹角(弧度)

# 计算总面积
total_area = 0.5 * np.sum(data_set[:-1] * data_set[1:] * np.sin(angle_step))

print(f"数据集的雷达图面积得分:{total_area:.2f}")

Plotly 实现步骤及代码

Plotly的雷达图数据存储在figure.data的每个trace中,提取r值后用同样的公式计算:

import numpy as np
import plotly.graph_objects as go

# 创建示例雷达图
fig = go.Figure()

# 添加两个数据集的雷达图轨迹
fig.add_trace(go.Scatterpolar(
    r=[4, 3, 5, 2, 4],
    theta=['特征1', '特征2', '特征3', '特征4', '特征1'],
    fill='toself',
    name='对象A'
))

fig.add_trace(go.Scatterpolar(
    r=[3, 5, 2, 4, 3],
    theta=['特征1', '特征2', '特征3', '特征4', '特征1'],
    fill='toself',
    name='对象B'
))

fig.update_layout(polar=dict(radialaxis=dict(visible=True)))

# 遍历每个轨迹计算面积得分
for trace in fig.data:
    r_values = np.array(trace.r)
    n_features = len(r_values) - 1
    angle_step = 2 * np.pi / n_features
    area = 0.5 * np.sum(r_values[:-1] * r_values[1:] * np.sin(angle_step))
    print(f"{trace.name}的雷达图面积得分:{area:.2f}")

注意事项

  • 若原始数据未首尾闭合,需手动将第一个元素添加到列表末尾,确保形成完整多边形
  • 公式中的角度必须用弧度计算,numpy的sin函数默认使用弧度
  • 面积得分的大小与特征数量、数据取值范围正相关,若需跨不同特征数量的数据集比较,可考虑对面积做归一化处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:15:43