使用 Python 创建 Excel 雷达图

雷达图(Radar Chart)是一种多维数据可视化工具,特别适合比较多个变量在不同维度上的表现。它在性能评估、能力分析、产品对比等场景中非常实用。本文将介绍如何使用 Python 在 Excel 中创建雷达图和填充雷达图,并对图表进行自定义设置。

为什么使用雷达图

雷达图具有以下优势:

  • 多维度对比:可以在同一图表中展示多个维度的数据
  • 直观的性能分析:清晰显示各项指标的强弱分布
  • 模式识别:通过图形形状快速识别数据模式和异常
  • 适用于评估场景:如员工绩效评估、产品特性对比、技能矩阵分析等

典型应用场景包括:

  • 员工多维度绩效评估(沟通能力、技术能力、领导力等)
  • 产品功能对比(价格、性能、易用性、可靠性等)
  • 市场分析(不同地区的销售表现)
  • 能力模型可视化(技能掌握程度)

环境准备

首先需要安装 Spire.XLS for Python 库:

bash 复制代码
pip install Spire.XLS

Spire.XLS 提供了完整的 Excel 文件操作 API,支持创建、读取、修改和转换 Excel 文档,无需安装 Microsoft Excel。

创建基础雷达图

下面我们将创建一个展示不同地区产品销售情况的雷达图。示例数据包含三种产品(自行车、汽车、卡车)在两个城市(巴黎、纽约)的销售数据。

步骤 1:准备数据并创建工作表

首先创建 Excel 工作簿并添加示例数据:

python 复制代码
from spire.xls import *
from spire.xls.common import *

def CreateChartData(sheet):
    # 设置产品标题
    sheet.Range["A1"].Value = "Product"
    sheet.Range["A2"].Value = "Bikes"
    sheet.Range["A3"].Value = "Cars"
    sheet.Range["A4"].Value = "Trucks"
    sheet.Range["A5"].Value = "Buses"
    
    # 设置巴黎销售数据
    sheet.Range["B1"].Value = "Paris"
    sheet.Range["B2"].NumberValue = 4000
    sheet.Range["B3"].NumberValue = 23000
    sheet.Range["B4"].NumberValue = 4000
    sheet.Range["B5"].NumberValue = 30000
    
    # 设置纽约销售数据
    sheet.Range["C1"].Value = "New York"
    sheet.Range["C2"].NumberValue = 30000
    sheet.Range["C3"].NumberValue = 7600
    sheet.Range["C4"].NumberValue = 18000
    sheet.Range["C5"].NumberValue = 8000
    
    # 设置标题行字体加粗
    sheet.Range["A1:C1"].Style.Font.IsBold = True
    
    # 为不同行设置背景色
    sheet.Range["A2:C2"].Style.KnownColor = ExcelColors.LightYellow
    sheet.Range["A3:C3"].Style.KnownColor = ExcelColors.LightGreen1
    sheet.Range["A4:C4"].Style.KnownColor = ExcelColors.LightOrange
    sheet.Range["A5:C5"].Style.KnownColor = ExcelColors.LightTurquoise
    
    # 设置边框样式
    style = sheet.Range["A1:C5"].Style
    borders = style.Borders
    
    # 设置上边框
    topborder = borders[BordersLineType.EdgeTop]
    topborder.Color = Color.FromRgb(0, 0, 128)
    borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin
    
    # 设置下边框
    borders[BordersLineType.EdgeBottom].Color = Color.FromRgb(0, 0, 128)
    sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
    
    # 设置左边框
    sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeLeft].Color = Color.FromRgb(0, 0, 128)
    sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin
    
    # 设置右边框
    sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeRight].Color = Color.FromRgb(0, 0, 128)
    sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin
    
    # 设置数字格式为货币格式
    sheet.Range["B2:C5"].Style.NumberFormat = "\"$\"#,##0"

# 创建工作簿
workbook = Workbook()
workbook.CreateEmptySheets(1)
sheet = workbook.Worksheets[0]
sheet.Name = "Chart data"
sheet.GridLinesVisible = False

# 写入图表数据
CreateChartData(sheet)

这段代码完成了以下任务:

  • 创建了包含产品和地区销售数据的表格
  • 设置了标题行的粗体样式
  • 为不同数据行应用了不同的背景色,提高可读性
  • 添加了深蓝色边框,使表格更加美观
  • 将数值格式化为美元货币格式

步骤 2:添加雷达图并配置属性

接下来在工作表中添加雷达图并设置其属性:

python 复制代码
# 添加新图表到工作表
chart = sheet.Charts.Add()

# 设置图表位置
chart.LeftColumn = 1
chart.TopRow = 6
chart.RightColumn = 11
chart.BottomRow = 29

# 设置图表数据范围
chart.DataRange = sheet.Range["A1:C5"]
chart.SeriesDataFromRange = False

# 设置图表类型为雷达图
chart.ChartType = ExcelChartType.Radar

# 设置图表标题
chart.ChartTitle = "Sale market by region"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12

# 隐藏绘图区背景
chart.PlotArea.Fill.Visible = False

# 设置图例位置
chart.Legend.Position = LegendPositionType.Corner

# 保存文档
workbook.SaveToFile("CreateRadarChart.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

结果预览:

关键 API 说明:

  • sheet.Charts.Add():向工作表添加新图表对象
  • chart.DataRange:指定图表使用的数据范围,这里使用 A1:C5 区域
  • chart.SeriesDataFromRange = False:表示数据系列不按行组织,而是按列组织
  • ExcelChartType.Radar:设置图表类型为雷达图(线条型)
  • chart.ChartTitle:设置图表标题文本
  • chart.PlotArea.Fill.Visible = False:隐藏绘图区背景,使图表更简洁
  • LegendPositionType.Corner:将图例放置在角落位置

生成的雷达图将以线条形式展示各产品在两个地区的销售数据,便于对比分析。

创建填充雷达图

除了标准雷达图,还可以创建填充雷达图(Radar Filled),这种类型会用颜色填充数据点之间的区域,视觉效果更加突出。

python 复制代码
# 创建工作簿
workbook = Workbook()
workbook.CreateEmptySheets(1)
sheet = workbook.Worksheets[0]
sheet.Name = "Chart data"
sheet.GridLinesVisible = False

# 写入图表数据
CreateChartData(sheet)

# 添加新图表到工作表
chart = sheet.Charts.Add()

# 设置图表位置
chart.LeftColumn = 1
chart.TopRow = 6
chart.RightColumn = 11
chart.BottomRow = 29

# 设置图表数据范围
chart.DataRange = sheet.Range["A1:C5"]
chart.SeriesDataFromRange = False

# 设置图表类型为填充雷达图
chart.ChartType = ExcelChartType.RadarFilled

# 设置图表标题
chart.ChartTitle = "Sale market by region"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12

# 隐藏绘图区背景
chart.PlotArea.Fill.Visible = False

# 设置图例位置
chart.Legend.Position = LegendPositionType.Corner

# 保存文档
workbook.SaveToFile("CreateRadarChart_Fill.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

结果预览:

填充雷达图与普通雷达图的主要区别在于:

  • ExcelChartType.RadarFilled:使用填充类型,数据点之间的区域会被颜色填充
  • 更适合强调数据范围和面积对比
  • 视觉上更加醒目,适合演示和报告场景

自定义雷达图样式

创建基本雷达图后,可以进一步自定义图表的各个元素,以满足特定的展示需求。

调整数据系列颜色

可以为不同的数据系列设置不同的颜色,提高图表的可区分度:

python 复制代码
# 获取第一个数据系列并设置颜色
series = chart.Series[0]
series.Format.LineProperties.Color = Color.FromRgb(255, 0, 0)  # 红色
series.Format.LineProperties.Width = 2.5

# 获取第二个数据系列并设置颜色
series2 = chart.Series[1]
series2.Format.LineProperties.Color = Color.FromRgb(0, 0, 255)  # 蓝色
series2.Format.LineProperties.Width = 2.5

自定义坐标轴

可以调整雷达图的坐标轴属性,包括刻度、标签格式等:

python 复制代码
# 获取值轴
valueAxis = chart.PrimaryValueAxis

# 设置坐标轴标题
valueAxis.Title = "Sales Amount"
valueAxis.TitleArea.IsBold = True
valueAxis.TitleArea.Size = 10

# 设置坐标轴数字格式
valueAxis.NumberFormat = "$#,##0"

# 设置主要网格线样式
valueAxis.MajorGridLines.LineProperties.Color = Color.FromRgb(200, 200, 200)
valueAxis.MajorGridLines.LineProperties.DashStyle = LineDashStyleType.Dash

添加数据标签

为数据点添加标签可以更清晰地显示具体数值:

python 复制代码
# 为每个系列添加数据标签
for series in chart.Series:
    seriePoints = series.DataPoints
    for point in seriePoints:
        point.DataLabels.HasValue = True
        point.DataLabels.Position = DataLabelPositionType.Above

调整图表大小和位置

可以根据需要调整图表在工作表中的位置和大小:

python 复制代码
# 设置图表占据的行列范围
chart.LeftColumn = 1      # 起始列
chart.TopRow = 6          # 起始行
chart.RightColumn = 11    # 结束列
chart.BottomRow = 29      # 结束行

# 或者使用像素级精确控制
chart.Top = 100           # 顶部位置(像素)
chart.Left = 50           # 左侧位置(像素)
chart.Width = 500         # 宽度(像素)
chart.Height = 400        # 高度(像素)

实际应用建议

在实际项目中使用雷达图时,可以考虑以下最佳实践:

数据准备

  • 确保所有维度使用相同的度量单位或已标准化
  • 数据维度不宜过多,建议控制在 5-8 个维度以内
  • 为每个维度提供清晰的标签说明

视觉优化

  • 使用对比明显的颜色区分不同数据系列
  • 适当调整线条宽度和透明度,避免重叠时难以辨认
  • 添加数据标签时注意位置,避免遮挡

交互增强

  • 在 Web 应用中,可以结合 JavaScript 库实现交互式雷达图
  • 添加悬停提示显示详细数值
  • 支持动态切换显示/隐藏特定数据系列

适用场景

  • 绩效评估系统:展示员工在多维度考核中的表现
  • 产品对比工具:比较不同产品的各项指标
  • 技能矩阵:可视化团队成员的技能分布
  • 竞争分析:对比企业与竞争对手的各项指标

总结

本文介绍了如何使用 Python 在 Excel 中创建和自定义雷达图。通过 Spire.XLS 库,我们可以:

  • 轻松创建标准雷达图和填充雷达图
  • 自定义图表的颜色、位置、标题等属性
  • 调整坐标轴、图例和数据标签的样式
  • 将雷达图应用于各种数据分析和可视化场景

雷达图是多维度数据分析的有力工具,特别适合需要同时比较多个变量的场景。结合 Python 的自动化能力,可以批量生成雷达图报表,大大提高数据分析效率。

通过灵活运用这些 API,您可以根据具体需求创建出专业、美观的雷达图,为数据分析和决策提供有力支持。

相关推荐
巡山小钻风来也8 小时前
FilterPy——工具库‌离线源码安装教程
python·pip
程序员cxuan8 小时前
还在用 xigh 拉满跑?大错特错
人工智能·后端·程序员
AI大模型8 小时前
被AI抢饭碗的Java程序员,后来都怎样了?
java·后端·ai编程
暴躁小师兄数据学院8 小时前
【AI大模型应用开发工程师特训笔记】第04讲(第7章):函数与模块
前端·人工智能·python
测试开发-学习笔记8 小时前
从0开始搭建app的自动化(二)-appium+python
python·appium·自动化
Wonderful U9 小时前
Python+Django打造AI赋能企业级项目管理平台
人工智能·python·django
惊鸿一博9 小时前
统计_滚动标准差:局部波动性衡量
开发语言·python
ZengLiangYi9 小时前
插件式架构设计:SourceAdapter 接口抽象
前端·javascript·后端
AskHarries9 小时前
为什么导航站越来越难做
后端