qidao123.com技术社区-IT企服评测·应用市场

标题: 『Plotly实战指南』--雷达图绘制与应用 [打印本页]

作者: 十念    时间: 2025-4-14 07:56
标题: 『Plotly实战指南』--雷达图绘制与应用
在数据分析和可视化领域,雷达图是一种适用于多维数据的可视化、综合评估和决策支持的工具。
雷达图通过将数据点沿多个轴分布,并通过多边形面积或线条连接来展示数据的多维度特征,能够直观地出现数据在各个维度上的表现,帮助我们快速辨认优势和劣势,从而做出更明智的决策。
本文紧张先容Plotly雷达图的奥秘,从绘制原理到实战应用,包括代码实现与分析方法。
1. 底子绘制

雷达图是一种多轴图表,数据点沿多个轴分布,每个轴代表一个维度。通过将数据点连接成多边形,可以直观地展示数据在各个维度上的表现。
1.1. 数据标准化

与其他图形(好比折线图,柱状图等等)差别,绘制雷达图之前,数据标准化是必不可少的步调。
由于雷达图的各个维度可能具有差别的量纲和范围,这会直接绘制会导致图形失真。
常用的数据标准化方法有两个:
绘制雷达图的数据结构要求:
1.2. 代码示例

下面通过一组测试数据(产物性能评分数据,包含多个维度,如摄像头、电池、屏幕等),来尝试绘制雷达图。
  1. import plotly.graph_objects as go
  2. # 数据准备
  3. categories = ["摄像头", "电池", "屏幕", "处理器", "设计"]
  4. values = [8, 7, 9, 6, 8]  # 示例评分
  5. values += values[:1]  # 闭合多边形
  6. categories += categories[:1]  # 闭合多边形
  7. fig = go.Figure(
  8.     data=[
  9.         go.Scatterpolar(
  10.             r=values,
  11.             theta=categories,
  12.             fill="toself",  # 填充闭合区域
  13.             name="产品性能评分",
  14.         )
  15.     ]
  16. )
  17. # 设置图表标题和布局
  18. fig.update_layout(
  19.     title="产品性能雷达图",
  20.     polar=dict(radialaxis=dict(visible=True, range=[0, 10])),  # 设置径向轴范围
  21.     showlegend=True,
  22. )
  23. # 显示图表
  24. fig.show()
复制代码
代码中的核心参数含义:
运行结果如下:

为了提升图表的可读性,可以对标签进行优化,例如调整字体巨细和角度。
  1. fig.update_layout(
  2.     title='产品性能雷达图',
  3.     polar=dict(
  4.         radialaxis=dict(
  5.             visible=True,
  6.             range=[0, 10]
  7.         ),
  8.         angularaxis=dict(
  9.             tickfont=dict(size=12),  # 设置标签字体大小
  10.             rotation=90,  # 设置标签旋转角度
  11.             direction='clockwise'  # 设置标签方向
  12.         )
  13.     ),
  14.     showlegend=True
  15. )
复制代码
调整之后显示如下:

2. 应用场景

2.1. 多组数据对比

通过go.Scatterpolar叠加多组数据,并使用差别颜色区分,可以直观地对比多组数据的性能。
  1. # 数据准备
  2. values1 = [8, 7, 9, 6, 8]
  3. values2 = [7, 8, 6, 7, 9]
  4. values1 += values1[:1]
  5. values2 += values2[:1]
  6. fig = go.Figure(data=[
  7.     go.Scatterpolar(
  8.         r=values1,
  9.         theta=categories,
  10.         fill='toself',
  11.         name='产品A'
  12.     ),
  13.     go.Scatterpolar(
  14.         r=values2,
  15.         theta=categories,
  16.         fill='toself',
  17.         name='产品B'
  18.     )
  19. ])
  20. # 设置图表标题和布局
  21. fig.update_layout(
  22.     title='多产品性能对比雷达图',
  23.     polar=dict(
  24.         radialaxis=dict(
  25.             visible=True,
  26.             range=[0, 10]
  27.         )
  28.     ),
  29.     showlegend=True
  30. )
  31. # 显示图表
  32. fig.show()
复制代码

2.2. 优劣势定位

假设我们有几家供应商的综合能力评估数据,包括质量、本钱、交付等维度。
我们将使用雷达图来评估这些供应商的综合能力。
  1. # 数据准备
  2. categories = ['质量', '成本', '交付', '服务', '创新']
  3. values1 = [8, 6, 7, 8, 7]  # 供应商A的评分
  4. values2 = [7, 8, 6, 7, 8]  # 供应商B的评分
  5. values3 = [9, 7, 8, 6, 9]  # 供应商C的评分
  6. values1 += values1[:1]
  7. values2 += values2[:1]
  8. values3 += values3[:1]
  9. categories += categories[:1]
  10. # 绘制雷达图
  11. fig = go.Figure(data=[
  12.     go.Scatterpolar(
  13.         r=values1,
  14.         theta=categories,
  15.         fill='toself',
  16.         name='供应商A'
  17.     ),
  18.     go.Scatterpolar(
  19.         r=values2,
  20.         theta=categories,
  21.         fill='toself',
  22.         name='供应商B'
  23.     ),
  24.     go.Scatterpolar(
  25.         r=values3,
  26.         theta=categories,
  27.         fill='toself',
  28.         name='供应商C'
  29.     )
  30. ])
  31. # 添加参考线(行业平均值)
  32. fig.add_trace(
  33.     go.Scatterpolar(
  34.         r=[7, 7, 7, 7, 7, 7],
  35.         theta=categories,
  36.         mode='lines',
  37.         line=dict(color='rgba(255, 0, 0, 0.5)', dash='dash'),
  38.         name='行业平均值'
  39.     )
  40. )
  41. # 设置图表标题和布局
  42. fig.update_layout(
  43.     title='供应商综合能力评估雷达图',
  44.     polar=dict(
  45.         radialaxis=dict(
  46.             visible=True,
  47.             range=[0, 10]
  48.         )
  49.     ),
  50.     showlegend=True
  51. )
  52. # 显示图表
  53. fig.show()
复制代码

通过雷达图,我们可以直观地看到各供应商在差别维度上的表现。
例如,供应商C在质量和创新方面表现较好,而供应商B在本钱方面表现更优。
通过添加行业平均值的参考线,我们可以进一步评估各供应商的综合能力。
2.3. 权重分析

结合维度权重盘算综合得分,例如加权平均。
然后在雷达图边上用柱状图显示总分对比。
  1. from plotly.subplots import make_subplots
  2. # 权重
  3. weights = [0.2, 0.3, 0.25, 0.15, 0.1]
  4. # 计算综合得分
  5. score1 = sum([v * w for v, w in zip(values1[:-1], weights)])
  6. score2 = sum([v * w for v, w in zip(values2[:-1], weights)])
  7. # 创建子图布局
  8. fig = make_subplots(
  9.     rows=1,
  10.     cols=2,
  11.     specs=[[{"type": "polar"}, {"type": "bar"}]],
  12.     subplot_titles=("产品性能雷达图", "综合得分对比")
  13. )
  14. # 添加雷达图
  15. fig.add_trace(
  16.     go.Scatterpolar(
  17.         r=values1,
  18.         theta=categories,
  19.         fill='toself',
  20.         name='产品A',
  21.         line=dict(color='rgba(0, 128, 0, 0.7)')
  22.     ),
  23.     row=1,
  24.     col=1
  25. )
  26. fig.add_trace(
  27.     go.Scatterpolar(
  28.         r=values2,
  29.         theta=categories,
  30.         fill='toself',
  31.         name='产品B',
  32.         line=dict(color='rgba(255, 165, 0, 0.7)')
  33.     ),
  34.     row=1,
  35.     col=1
  36. )
  37. # 添加柱状图
  38. fig.add_trace(
  39.     go.Bar(
  40.         x=['产品A', '产品B'],
  41.         y=[score1, score2],
  42.         marker=dict(color=['rgba(0, 128, 0, 0.7)', 'rgba(255, 165, 0, 0.7)'])
  43.     ),
  44.     row=1,
  45.     col=2
  46. )
  47. # 设置雷达图布局
  48. fig.update_layout(
  49.     polar=dict(
  50.         radialaxis=dict(
  51.             visible=True,
  52.             range=[0, 10]
  53.         )
  54.     ),
  55.     showlegend=True
  56. )
  57. # 设置柱状图布局
  58. fig.update_layout(
  59.     barmode='group',
  60.     bargap=0.2,
  61.     bargroupgap=0.1
  62. )
  63. # 显示图表
  64. fig.show()
复制代码

3. 总结

雷达图在多维数据评估中具有不可替换的作用,它能够直观地展示数据在各个维度上的表现,帮助我们快速辨认优势和劣势,从而做出更明智的决策。
通过使用 Plotly 绘制雷达图,我们可以轻松实现多组数据的对比评估,并结合权重分析和参考线等工具,进一步提升决策的科学性和精确性。
在实际应用中,数据预处置惩罚阶段要重视标准化方法的选择,确保各维度之间的可比性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4