目录
1. 基本雷达图
2. 多组数据的雷达图
3 交互式雷达地图
4 动态雷达图
0 雷达图概述
雷达图(Radar Chart),也被称为蜘蛛图(Spider Chart)或星型图,是一种用于可视化多维数据的图表类型。雷达图通常由一个多边形或星形的图形构成,每个顶点代表数据的不同维度,而多边形的边缘表示数据的数值。每个维度通常位于雷达图的边缘,而数据值沿着半径方向绘制。
以下是雷达图的一般特点和用途:
特点:
多维度表示:雷达图允许同时表示多个维度的数据,每个维度对应于雷达图的一个轴。这使得用户可以直观地比较不同维度的数据。
相对比例:数据通常以相对比例的方式表示,因此用户可以看到各维度之间的相对关系。这使得雷达图在比较不同数据集的相对强度时非常有用。
多数据集对比:雷达图适用于比较多个数据集之间的差异。通过在同一个雷达图上绘制多个多边形,用户可以清晰地看到不同数据集的表现。
用途:
绩效评估:雷达图常用于评估个体或团队在多个维度上的绩效。例如,可以使用雷达图来评估一名运动员在速度、力量、灵活性等维度上的表现。
决策支持:在决策过程中,雷达图可以帮助决策者比较不同选项在多个关键因素上的优劣。这有助于做出综合决策。
产品特性对比:在产品设计和开发中,雷达图可以用来比较不同产品特性在用户需求、成本、复杂性等方面的差异。
风险分析:雷达图可用于分析风险因素在不同维度上的潜在影响。这对于制定风险管理策略很有帮助。
总之,雷达图是一种多维数据可视化工具,它可以帮助用户更好地理解和比较数据的多个方面,从而支持决策和分析。
1. 基本雷达图
基本雷达图用于可视化多个维度的数据。这种图通常具有一个中心点,每个维度的数据以线条或面积表示。基本雷达图用于可视化单个数据集的不同类别或维度。
import matplotlib.pyplot as plt
import numpy as np
# 数据准备
categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']
values = [4, 2, 5, 1, 3]
# 标准化数据
normalized_values = [x / max(values) for x in values]
# 创建雷达图
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
normalized_values += normalized_values[:1]
angles += angles[:1]
# 绘制雷达图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.fill(angles, normalized_values, 'b', alpha=0.1)
# 设置轴标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
# 添加标题
plt.title("Filled Radar Chart")
plt.show()
在此示例中,我们首先准备了数据并对其进行了标准化。然后,我们创建了雷达图,并使用
fill
函数填充了雷达图中的区域,以强调每个维度的值。最后,我们添加了轴标签和标题,以提高图表的可读性。
2. 多组数据的雷达图
这个示例展示如何绘制多组数据的雷达图,以便比较它们。
import matplotlib.pyplot as plt
import numpy as np
categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']
values1 = [4, 2, 5, 1, 3]
values2 = [3, 4, 2, 3, 5]
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
values1 += values1[:1]
values2 += values2[:1]
angles += angles[:1]
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.fill(angles, values1, 'b', alpha=0.1, label='Dataset 1')
ax.fill(angles, values2, 'r', alpha=0.1, label='Dataset 2')
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.legend()
plt.show()
3 交互式雷达地图
交互式雷达地图允许用户与地图进行互动,例如缩放、平移、悬停在数据点上查看详细信息等。Plotly是一个流行的Python库,用于创建交互式图表,包括雷达图。
首先,确保你已经安装了Plotly库。如果没有安装,可以使用以下命令进行安装:
pip install plotly
绘制交互式雷达地图:
import plotly.express as px
# 示例数据
data = {
"City": ["New York", "Los Angeles", "Chicago", "Houston", "Miami"],
"Temperature (°C)": [18, 24, 12, 27, 29],
"Humidity (%)": [75, 62, 58, 84, 76]
}
# 创建交互式雷达地图
fig = px.line_polar(data, r="Temperature (°C)", theta="City", line_close=True, range_r=[0, 30])
fig.update_traces(fill='toself')
# 添加湿度数据
fig.add_trace(px.line_polar(data, r="Humidity (%)", theta="City", line_close=True, range_r=[0, 100]).data[0])
# 设置布局
fig.update_layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 100]
)
),
showlegend=True
)
# 显示交互式雷达地图
fig.show()
结果在浏览器中展示如下:
在这个示例中,我们使用
plotly.express
创建了一个交互式雷达地图。我们首先定义了示例数据,包括城市、平均气温和湿度。然后,我们使用px.line_polar
创建了一个雷达图,显示平均气温数据,同时使用px.line_polar
添加了湿度数据。最后,我们设置了布局选项,并使用fig.show()
显示交互式雷达地图。
4 动态雷达图
用于跟踪数据随时间变化的情况。每个时间点都可以表示为一个雷达图,形成时间序列。
import matplotlib.pyplot as plt
import numpy as np
# 数据准备
categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']
time_points = ['Time 1', 'Time 2', 'Time 3', 'Time 4', 'Time 5']
# 模拟不同时间点的数据,确保每个时间点的数据长度相同
data = np.random.randint(1, 10, size=(len(time_points), len(categories)))
# 创建雷达图
fig, axs = plt.subplots(1, len(time_points), subplot_kw={'projection': 'polar'}, figsize=(12, 4))
for i, ax in enumerate(axs):
values = data[i]
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
values = np.append(values, values[0]) # 为了保证维度一致,添加一个起始点
angles = np.append(angles, angles[0]) # 添加一个起始角度
ax.fill(angles, values, 'b', alpha=0.1)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.set_title(time_points[i])
plt.tight_layout()
plt.show()
在此示例中,我们创建了一个包含不同时间点数据的雷达图时间序列。每个时间点的数据以不同的颜色表示,并排列在一个图表中,以显示数据随时间的变化。这是一个简单的静态示例,你可以使用动画库或交互式可视化工具库来创建动态雷达图,以更好地表示数据的时间演变。