龙空技术网

雷达图(Radar Chart) & 代码实现

川后静波kimble 107

前言:

当前大家对“雷达图如何做分区图”可能比较关心,我们都想要了解一些“雷达图如何做分区图”的相关资讯。那么小编也在网摘上收集了一些有关“雷达图如何做分区图””的相关文章,希望兄弟们能喜欢,你们快快来学习一下吧!

雷达图(Radar Chart)

雷达图是一种用于展示多维数据的可视化方法,它可以清晰地展示出各个维度之间的相对重要性以及各项指标的优劣。

雷达图通常用来比较多个定量数据,用于查看哪些变量具有相似的值。

2015-16 NBA 赛季金州勇士队进攻(绿色)和防守(红色)的雷达图

图形特征

雷达图的本质:折线图,只不过将折线图映射到了极坐标系

在绘制雷达图时,需要让折线闭合,简单的说就是首尾相连。

应用场景:

1、企业经营状况——收益性、生产性、流动性、安全性和成长性的评价。

2、NBA 的转播中就经常使用雷达图来展示球员的各项数据。

3、学生的考试成绩分析。

下面是绘制雷达图的代码实现。

完整代码1、导入包

import csvimport mathfrom typing import List, Tupleimport matplotlib.pyplot as pltimport numpy as npplt.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、效果

标签: #雷达图如何做分区图