『Plotly实战指南』--雷达图绘制与应用
在数据分析和可视化领域,雷达图是一种适用于多维数据的可视化、综合评估和决策支持的工具。
雷达图通过将数据点沿多个轴分布,并通过多边形面积或线条连接来展示数据的多维度特征,能够直观地呈现数据在各个维度上的表现,帮助我们快速识别优势和劣势,从而做出更明智的决策。
本文主要介绍Plotly
雷达图的奥秘,从绘制原理到实战应用,包括代码实现与分析方法。
1. 基础绘制
雷达图是一种多轴图表,数据点沿多个轴分布,每个轴代表一个维度。通过将数据点连接成多边形,可以直观地展示数据在各个维度上的表现。
1.1. 数据标准化
与其他图形(比如折线图,柱状图等等)不同,绘制雷达图之前,数据标准化是必不可少的步骤。
因为雷达图的各个维度可能具有不同的量纲和范围,这会直接绘制会导致图形失真。
常用的数据标准化方法有两个:
- 归一化(
Min-Max Scaling
):将数据缩放到 [0, 1] 区间。 Z-score
标准化:将数据转换为均值为 0,标准差为 1 的分布。
绘制雷达图的数据结构要求:
- 输入数据需为二维列表或数组,每行代表一个对象在各个维度上的值。
- 维度标签(theta)与数值(r)需一一对应。
1.2. 代码示例
下面通过一组测试数据(产品性能评分数据,包含多个维度,如摄像头、电池、屏幕等),来尝试绘制雷达图。
import plotly.graph_objects as go
# 数据准备
categories = ["摄像头", "电池", "屏幕", "处理器", "设计"]
values = [8, 7, 9, 6, 8] # 示例评分
values += values[:1] # 闭合多边形
categories += categories[:1] # 闭合多边形
fig = go.Figure(
data=[
go.Scatterpolar(
r=values,
theta=categories,
fill="toself", # 填充闭合区域
name="产品性能评分",
)
]
)
# 设置图表标题和布局
fig.update_layout(
title="产品性能雷达图",
polar=dict(radialaxis=dict(visible=True, range=[0, 10])), # 设置径向轴范围
showlegend=True,
)
# 显示图表
fig.show()
代码中的核心参数含义:
r
:绑定数值数据,表示各个维度的数值theta
:设置维度标签,支持字符串或数值标签fill
:填充模式选择,'toself'
表示闭合区域填充,'none'
表示仅绘制线条line
:线条样式,包括颜色、宽度、透明度等
运行结果如下:
为了提升图表的可读性,可以对标签进行优化,例如调整字体大小和角度。
fig.update_layout(
title='产品性能雷达图',
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 10]
),
angularaxis=dict(
tickfont=dict(size=12), # 设置标签字体大小
rotation=90, # 设置标签旋转角度
direction='clockwise' # 设置标签方向
)
),
showlegend=True
)
调整之后显示如下:
2. 应用场景
2.1. 多组数据对比
通过go.Scatterpolar
叠加多组数据,并使用不同颜色区分,可以直观地对比多组数据的性能。
# 数据准备
values1 = [8, 7, 9, 6, 8]
values2 = [7, 8, 6, 7, 9]
values1 += values1[:1]
values2 += values2[:1]
fig = go.Figure(data=[
go.Scatterpolar(
r=values1,
theta=categories,
fill='toself',
name='产品A'
),
go.Scatterpolar(
r=values2,
theta=categories,
fill='toself',
name='产品B'
)
])
# 设置图表标题和布局
fig.update_layout(
title='多产品性能对比雷达图',
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 10]
)
),
showlegend=True
)
# 显示图表
fig.show()
2.2. 优劣势定位
假设我们有几家供应商的综合能力评估数据,包括质量、成本、交付等维度。
我们将使用雷达图来评估这些供应商的综合能力。
# 数据准备
categories = ['质量', '成本', '交付', '服务', '创新']
values1 = [8, 6, 7, 8, 7] # 供应商A的评分
values2 = [7, 8, 6, 7, 8] # 供应商B的评分
values3 = [9, 7, 8, 6, 9] # 供应商C的评分
values1 += values1[:1]
values2 += values2[:1]
values3 += values3[:1]
categories += categories[:1]
# 绘制雷达图
fig = go.Figure(data=[
go.Scatterpolar(
r=values1,
theta=categories,
fill='toself',
name='供应商A'
),
go.Scatterpolar(
r=values2,
theta=categories,
fill='toself',
name='供应商B'
),
go.Scatterpolar(
r=values3,
theta=categories,
fill='toself',
name='供应商C'
)
])
# 添加参考线(行业平均值)
fig.add_trace(
go.Scatterpolar(
r=[7, 7, 7, 7, 7, 7],
theta=categories,
mode='lines',
line=dict(color='rgba(255, 0, 0, 0.5)', dash='dash'),
name='行业平均值'
)
)
# 设置图表标题和布局
fig.update_layout(
title='供应商综合能力评估雷达图',
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 10]
)
),
showlegend=True
)
# 显示图表
fig.show()
通过雷达图,我们可以直观地看到各供应商在不同维度上的表现。
例如,供应商C在质量和创新方面表现较好,而供应商B在成本方面表现更优。
通过添加行业平均值的参考线,我们可以进一步评估各供应商的综合能力。
2.3. 权重分析
结合维度权重计算综合得分,例如加权平均。
然后在雷达图边上用柱状图显示总分对比。
from plotly.subplots import make_subplots
# 权重
weights = [0.2, 0.3, 0.25, 0.15, 0.1]
# 计算综合得分
score1 = sum([v * w for v, w in zip(values1[:-1], weights)])
score2 = sum([v * w for v, w in zip(values2[:-1], weights)])
# 创建子图布局
fig = make_subplots(
rows=1,
cols=2,
specs=[[{"type": "polar"}, {"type": "bar"}]],
subplot_titles=("产品性能雷达图", "综合得分对比")
)
# 添加雷达图
fig.add_trace(
go.Scatterpolar(
r=values1,
theta=categories,
fill='toself',
name='产品A',
line=dict(color='rgba(0, 128, 0, 0.7)')
),
row=1,
col=1
)
fig.add_trace(
go.Scatterpolar(
r=values2,
theta=categories,
fill='toself',
name='产品B',
line=dict(color='rgba(255, 165, 0, 0.7)')
),
row=1,
col=1
)
# 添加柱状图
fig.add_trace(
go.Bar(
x=['产品A', '产品B'],
y=[score1, score2],
marker=dict(color=['rgba(0, 128, 0, 0.7)', 'rgba(255, 165, 0, 0.7)'])
),
row=1,
col=2
)
# 设置雷达图布局
fig.update_layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 10]
)
),
showlegend=True
)
# 设置柱状图布局
fig.update_layout(
barmode='group',
bargap=0.2,
bargroupgap=0.1
)
# 显示图表
fig.show()
3. 总结
雷达图在多维数据评估中具有不可替代的作用,它能够直观地展示数据在各个维度上的表现,帮助我们快速识别优势和劣势,从而做出更明智的决策。
通过使用 Plotly
绘制雷达图,我们可以轻松实现多组数据的对比评估,并结合权重分析和参考线等工具,进一步提升决策的科学性和准确性。
在实际应用中,数据预处理阶段要重视标准化方法的选择,确保各维度之间的可比性。
『Plotly实战指南』--雷达图绘制与应用的更多相关文章
- Python简单雷达图绘制
import numpy as npimport matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.family'] ...
- 『Numpy学习指南』Matplotlib绘图
数据生成: import numpy as np import matplotlib.pyplot as plt func = np.poly1d(np.array([,,,])) func1 = f ...
- 『Numpy学习指南』排序&索引&抽取函数介绍
排序: numpy.lexsort(): numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下: 强调一点,本函数只接受一个参数! import nump ...
- 【带着canvas去流浪(6)】绘制雷达图
目录 一. 任务说明 二. 重点提示 三. 示例代码 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文 ...
- 带着canvas去流浪系列之六 绘制雷达图
[摘要] 用canvas原生API实现百度Echarts基本图表. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvas ...
- Web 前端实战(三):雷达图
前言 在<Canvas 线性图形(五):多边形>实现了绘制多边形的函数.本篇文章将记录如何绘制雷达图.最终实现的效果是这样的: 绘制雷达图 雷达图里外层 如动图中所示,雷达图从里到外一共有 ...
- Web 前端实战:雷达图
前言 在Canvas 线性图形(五):多边形实现了绘制多边形的函数.本篇文章将记录如何绘制雷达图.最终实现的效果是这样的: 绘制雷达图 雷达图里外层 如动图中所示,雷达图从里到外一共有 6 层,所以, ...
- Python成绩单雷达图
1numpy库 numpy 是 python 的科学计算库 部分功能: 1.使用numpy读取txt文件 # dtype = "str":指定数据格式 # delimiter = ...
- ECharts雷达图详细配置说明
雷达图表配置说明: // 指定图表的配置项和数据 var option = { backgroundColor: 'rgba(204,204,204,0.7 )', // 背景色,默认无背景 rgba ...
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
作者:阿里云用户mr_wid ,z)NKt# @I6A9do 如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV RsfTUb)< 投票标题: 28.[阿里云 ...
随机推荐
- 使用kNN算法改进约会网站配对效果(尺度归一化问题)
简单匹配:
- Windows中利用任务计划执行进程守护
在Windows中除了开发专用的进程守护外,还可以利用任务计划做进程守护. 一.bat示例 tasklist | findstr "notepad" if %ERRORLEVEL% ...
- AlertWindowManager 弹出提示窗口
LookAndFeel(界面外观): NativeStyle:本地化界面为真实用系统内置外观 SkinName:本地化界面(NativeStyle:)设置为假可使用皮肤外观 OptionAnimate ...
- 降阶公式/ARC173F
ARC173F 题意 给定 \(n,A,B\),初始有一个集合 \(S=\{1,2,\dots,A,A +1,A+2,\dots,A+B\}\).进行如下操作 \(n-1\) 次使得剩下 \(n\) ...
- FLink自定义Sink,生产的数据导出到mysql
一.自定义生产数据 https://www.cnblogs.com/robots2/p/16048729.html 二.生产转化数据,导出到mysql 2.1 建表语句 CREATE TABLE `v ...
- 支付宝 v3 自签名如何实现
今天在看文档的时候,发现支付宝新出了一个 v3 版本的接口调用方式,感觉有点意思,花了点时间研究了下这个版本要怎么实现自签名,大家有兴趣可以看看. 什么是支付宝 API v3 版本? 官网上给的解释是 ...
- 多节点oceanbase 集群部署
安装前准备 硬件要求 CPU最少2核 磁盘最少19G 文件系统EXT4 戓 XFS 关闭透明大页 echo never > /sys/kernel/mm/redhat_transparent_h ...
- Vue3 基础概念与环境搭建
前言 首先需要提醒大家的是,Vue2 已经在2023年停止维护,为了能更好地适应前端开发的发展趋势以及获得更好的性能和功能,我们将从这篇文章开始进入Vue3的阶段.如果对Vue2有想了解的小伙伴可以自 ...
- 【.NET】调用本地 Deepseek 模型
本篇咱们来聊一聊怎么在 .NET 代码中使用本地部署的 Deepseek 语言模型.大伙伴们不必要紧张,很简单的,你不需要学习新知识,只要你知道 .NET 如何访问 HTTP 和 JSON 的序列化相 ...
- IDEA 常见设置
一.字体设置 二.自动导入java包和自动清除无用的引用 清除无用的import包手动快捷键:Ctrl + Alt + O 添加引用在代码中光标指向需要添加引用的上,然后使用快捷键:Alt+Enter ...