Python数据可视化之从绘制精美雷达图的新手指南

 更新时间:2025年11月10日 08:23:12   作者:烛阴  
这篇文章主要为大家详细介绍了Pytho如何绘制精美雷达图从而实现数据可视化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

安装必要的库

我们需要安装两个核心的 Python 库:matplotlib 用于绘图,numpy 用于高效的数值计算:

pip install matplotlib numpy

绘制雷达图的核心逻辑

创建雷达图的过程可以清晰地分解为以下几步,理解了这些步骤,你就能自如地应对各种定制化需求:

  • 数据准备:确定雷达图需要展示的几个维度(标签),以及每个对象在这些维度上的具体数值。
  • 创建极坐标画布:雷达图并非画在常规的直角坐标系上,而是画在一个圆形布局的极坐标系 (Polar Coordinates) 上。
  • 计算角度:根据维度的数量,将 360 度的圆进行等分,确定每个维度轴线所在的角度。
  • 闭合图形:为了让雷达图形成一个封闭的多边形,我们需要在数据和角度列表的末尾,额外补充上第一个点的数据和角度。
  • 绘图与美化:在坐标系上绘制数据点连线、填充颜色、添加网格、标签、图例和标题,使图表变得完整且易于解读。

示例代码

现在,让我们用具体的代码来实现一个“篮球运动员能力对比”的雷达图。

import numpy as np
import matplotlib.pyplot as plt

def create_table_tennis_radar_chart():
    """
    创建一个专门用于展示乒乓球运动员六维能力数据的雷达图。
    """
    # 解决中文显示问题
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False

    # 1. 定义六个维度的标签
    labels = np.array(['力量', '速度', '技巧', '防守', '发球', '经验'])
    n_labels = len(labels)

    # 2. 准备运动员的数据 (这里是假设的示例数据)
    # “六边形战士”的数据,各项能力非常均衡且顶尖
    hex_warrior_stats = [98, 95, 99, 92, 96, 100]
    # “进攻型选手”的数据,力量和速度突出,防守相对是短板
    attacker_stats = [100, 98, 85, 75, 90, 80]

    # 3. 计算角度 (360度/6)
    angles = np.linspace(0, 2 * np.pi, n_labels, endpoint=False)

    # 4. 闭合图形数据
    hex_warrior_stats_closed = np.concatenate((hex_warrior_stats, [hex_warrior_stats[0]]))
    attacker_stats_closed = np.concatenate((attacker_stats, [attacker_stats[0]]))
    angles_closed = np.concatenate((angles, [angles[0]]))

    # 5. 绘图
    fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))

    # 设置坐标轴范围
    ax.set_ylim(0, 105)

    # 绘制“六边形战士”
    ax.plot(angles_closed, hex_warrior_stats_closed, 'o-', color='gold', linewidth=2, label='“六边形战士”')
    ax.fill(angles_closed, hex_warrior_stats_closed, 'gold', alpha=0.25)

    # 绘制“进攻型选手”
    ax.plot(angles_closed, attacker_stats_closed, 'o-', color='red', linewidth=2, label='进攻型选手')
    ax.fill(angles_closed, attacker_stats_closed, 'red', alpha=0.25)

    # 6. 美化图表
    # 设置维度标签
    ax.set_thetagrids(angles * 180 / np.pi, labels, fontsize=14)

    # 设置半径刻度标签
    ax.set_rlabel_position(0)
    ax.set_yticklabels(['', '20', '40', '60', '80', '100'], color="grey", size=10)

    # 添加标题和图例
    plt.title('乒乓球运动员能力对比雷达图', size=22, color='black', y=1.1)
    plt.legend(loc='best', bbox_to_anchor=(1.1, 1.1), fontsize=12)

    # 显示网格
    ax.grid(True, linestyle='--', linewidth=0.5, color='gray')
    
    # 显示图表
    plt.show()

# --- 主程序入口 ---
if __name__ == "__main__":
    create_table_tennis_radar_chart()

解析:

  • plt.rcParams 设置:这两行是为了确保 Matplotlib 可以正确显示中文字符。如果你不设置,图表中的中文可能会显示为方框。你需要确保你的系统中有 SimHei (黑体) 或其他中文字体。
  • np.linspace(0, 2 * np.pi, n_labels, endpoint=False):这是创建角度数组的核心。它在 0 到 360 度(2*np.pi)之间,生成 n_labels 个等分的角度值。endpoint=False参数是关键,它避免了 360 度和 0 度重合。
  • np.concatenate():这个 NumPy 函数用于连接数组。我们用它将第一个数据点和第一个角度值拼接到数组的末尾,从而实现图形的闭合。
  • subplot_kw=dict(polar=True):在创建子图(ax)时,这个参数告诉 Matplotlib:“我想要的不是普通的直角坐标系,而是一个极坐标系”。
  • ax.plot()ax.fill()plot 负责画出数据的轮廓线,而 fill 则为这个轮廓区域填充上带有一定透明度(alpha)的颜色,使得重叠区域也能清晰可见。
  • ax.set_thetagrids():这个函数专门用于在极坐标上设置角度网格线(也就是我们的维度轴)的位置和显示的标签。它需要将弧度制的 angles 转换为角度制 (angles * 180 / np.pi)。

效果

到此这篇关于Python数据可视化之从绘制精美雷达图的新手指南的文章就介绍到这了,更多相关Python绘制雷达图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • matplotlib作图添加表格实例代码

    matplotlib作图添加表格实例代码

    这篇文章主要介绍了matplotlib作图添加表格实例代码,实例绘制了一个简单的折线图,并且在图中添加了一个表格,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 如何使用Pytorch完成图像分类任务详解

    如何使用Pytorch完成图像分类任务详解

    如果你刚刚开始学习 PyTorch,并想学习如何做一些基本的图像分类,可以看看本文,这篇文章主要给大家介绍了关于如何使用Pytorch完成图像分类任务的相关资料,需要的朋友可以参考下
    2022-08-08
  • 实例详解Python装饰器与闭包

    实例详解Python装饰器与闭包

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。本文主要给大家介绍Python装饰器与闭包的相关知识,需要的朋友可以参考下
    2019-07-07
  • Python3 replace()函数使用方法

    Python3 replace()函数使用方法

    这篇文章主要介绍了Python3 replace()函数使用方法,需要的朋友可以参考下
    2018-03-03
  • Python画图小案例之多啦A梦叮当猫超详细注释

    Python画图小案例之多啦A梦叮当猫超详细注释

    在看了很多Python教程之后,觉得是时候做点什么小项目来练练手了,于是想来想去,用python写了一个童年记忆的卡通人物哆啦A梦,代码注释无比详细清楚,快来看看吧
    2021-09-09
  • python 实现return返回多个值

    python 实现return返回多个值

    今天小编就为大家分享一篇python 实现return返回多个值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python enumerate函数的使用方法总结

    python enumerate函数的使用方法总结

    这篇文章主要介绍了python enumerate使用方法总结,enumerate函数用于遍历序列中的元素以及它们的下标,有兴趣的可以了解一下
    2017-11-11
  • 使用Python编写一个SQL语句自动转换工具(UPDATE到INSERT转换)

    使用Python编写一个SQL语句自动转换工具(UPDATE到INSERT转换)

    在日常数据库维护和数据处理过程中,我们经常需要将UPDATE语句转换为INSERT语句,特别是在数据迁移、备份恢复或测试数据准备的场景中,本文将介绍如何使用Python编写一个自动化工具,实现UPDATE语句到INSERT语句的高效转换,需要的朋友可以参考下
    2025-09-09
  • Python结合SQLite构建一个完整数据驱动应用的终极指南

    Python结合SQLite构建一个完整数据驱动应用的终极指南

    这篇文章主要为大家详细介绍了Python结合SQLite构建一个完整数据驱动应用的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-01-01
  • python中黄金分割法实现方法

    python中黄金分割法实现方法

    这篇文章主要介绍了python中黄金分割法实现方法,涉及Python数学计算的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论