雷达图(Radar Chart)
雷达图是一种用于展示多维数据的可视化方法,它可以清晰地展示出各个维度之间的相对重要性以及各项指标的优劣。
雷达图通常用来比较多个定量数据,用于查看哪些变量具有相似的值。

2015-16 NBA 赛季金州勇士队进攻(绿色)和防守(红色)的雷达图
图形特征
雷达图的本质: 折线图 ,只不过将折线图映射到了 极坐标系 。
在绘制雷达图时,需要让折线闭合,简单的说就是首尾相连。
应用场景:
1、企业经营状况——收益性、生产性、流动性、安全性和成长性的评价。
2、NBA 的转播中就经常使用雷达图来展示球员的各项数据。
3、学生的考试成绩分析。
下面是绘制雷达图的代码实现。
完整代码
1、导入包
import csv
import math
from typing import List, Tuple
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
2、读取csv函数
def read_csv(path: str) -> List[list]:
with open(path, newline='') as csvfile:
reader = csv.reader(csvfile)
return [row for row in reader]
3、绘制雷达图函数
def draw_radar(
data: List[list],
ylim: Tuple[float, float] = None,
fill: bool = True,
save_path: str = 'radar.pdf'
):
"""根据给定的数据绘制雷达图。
备注:
数据应该是列表列表,其中第一行是标题,第一列是标签。允许缺少值。
示例:
```
data = [
['', 'header1', 'header2', 'header3'],
['dimension1', 1, 2, 3],
['dimension2', 4, '', 6],
['dimension3', 7, 8, 9],
]
```
参数:
data (List[list]): 要绘制的数据。
ylim (Tuple[float, float], optional): y轴限制。默认为“无”。
fill (bool, optional): 是否填充该区域。默认为True。
save_path (str, optional): 保存图形的路径。默认为“radar.pdf”。
"""
plt.style.use('ggplot')
plt.figure(figsize=(7, 5), dpi=300)
header = data[0][1:] # 排除第一列,即标签
content = data[1:]
N = len(header)
angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()
angles = [*angles, angles[0]] # To close the plot
for row in content:
label = row[0]
real_angles, real_data = [], []
for angle, data_point in zip(angles, row[1:]+[row[1]]):
if data_point == '':
continue
real_angles.append(angle)
real_data.append(float(data_point))
plt.polar(real_angles, real_data, 'o-', label=label)
plt.fill(real_angles, real_data, alpha=0.2) if fill else ...
plt.thetagrids([angle*180/math.pi for angle in angles], [*header, header[0]])
plt.ylim(*ylim) if ylim is not None else ...
plt.legend(loc = (1.05,0))
plt.grid(True)
plt.tight_layout()
plt.savefig(save_path)
4、调用
data = read_csv('data.csv')
draw_radar(data)
5、效果
